Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@tato30/vue-pdf
Advanced tools
VuePDF is a Vue 3 wrapper for pdf.js that enable you to display pdf pages in your project.
This package is for Vue 3 and supports the same browsers as Vue 3. If you want a package for Vue 2 or older browsers check this project from FranckFreiburger: vue-pdf.
npm i @tato30/vue-pdf
You can find a live demo to check a few examples to use the component.
<script>
import { VuePDF, usePDF } from '@tato30/vue-pdf'
export default {
components: {
VuePDF
},
setup() {
const { pdf, pages, info } = usePDF('document.pdf')
console.log(`Document has ${pages} pages`)
console.log(`Document info: ${info}`)
return {
pdf
}
}
}
</script>
<template>
<VuePDF :pdf="pdf" :page="1" />
</template>
This function is the pdf loader, let you get the basic information and properties about pdf document.
Type: string | URL | TypedArray | DocumentInitParameters
Required: True
This param is the same src
of pdf.js
const { pdf, pages, info } = usePDF('document.pdf')
Type: object
an object with the optional properties:
onPassword
: Callback function to request the document password if wrong or no passwrod provider.onProgress
: Callback function to enable progress monitor.onError
: function to handle pdf loading errorsfunction onPassword(updatePassword, reason) {
console.log(`Reason for callback: ${reason}`)
updatePassword('documentpassword1234')
}
function onProgress({ loaded, total }) {
console.log(`${loaded / total * 100}% Loaded`)
}
function onError(reason) {
console.error(`PDF loading error: ${reason}`)
}
const { pdf, pages, info } = usePDF('document.pdf', {
onPassword,
onProgress,
onError
})
Type: PDFDocumentLoadingTask
The loading task of document, see PDFDocumentLoadingTask for more details
Type: int
Pages number of document
Type: object
Info object about document
{
"metadata": {...}, // Metadata object
"attachments": {...}, // File attachments object
"javascript": [...], // Array of embedded scripts
}
This is the component to render a pdf page.
Type: PDFDocumentLoadingTask
Required: True
The PDFDocumentLoadingTask obtained from usePDF
<VuePDF :pdf="pdf" />
Type: int
Default: 1
Page to render, this prop must be the page number starting at 1
<VuePDF :pdf="pdf" :page="2" />
Type: int
Default: 1
Scale to render page
<VuePDF :pdf="pdf" :page="1" :scale="0.5" />
Type: boolean
Default: false
Fit page with parent width, this prop replace scale
in width calculation
<VuePDF :pdf="pdf" :page="1" fit-parent />
Type: int
Default: Document Default
Rotate the page in 90° multiples eg. (90
, 180
, 270
)
<VuePDF :pdf="pdf" :page="1" :rotation="90" />
Type: boolean
Default: false
Enable text selection in page
<VuePDF :pdf="pdf" :page="1" text-layer />
Type: boolean
Default: false
Enable document annotations like links, popups, etc.
<VuePDF :pdf="pdf" :page="1" annotation-layer />
Type: array
Default: null
Allows to choose which annotations display on page, the following options are available:
Link | Text | Stamp | Popup | FreeText |
Line | Square | Circle | PolyLine | Caret |
Ink | Polygon | Highlight | Underline | Squiggly |
StrikeOut | FileAttachment | Widget.Tx | Widget.Btn | Widget.Ch |
Widget.Sig | Widget |
NOTE:
Widget
shows allWidget
subtypes likeWidget.Tx
, etc.
<VuePDF :pdf="pdf" :page="1" annotation-layer :annotations-filter="filter" />
<script>
...
setup(){
return {
filter: ["Highlight", "Popup", "Widget"]
}
}
Allows to reload page render task, useful to update parent width when fit-parent
prop is used
<template>
<VuePDF ref="VPDF" :pdf="pdf" :page="2" />
</template>
setup(){
const VPDF = ref({})
return {
VPDF,
someEvent: () => {
VPDF.value.reload()
},
}
}
object
Emitted when page has finishes rendering in view
<template>
<VuePDF :pdf="pdf" :page="2" @loaded="loadedEvent" />
</template>
const loadedEvent = (value) => {
console.log(value);
},
Value contains render page info
{
"viewBox": [0, 0, 595.276, 841.89],
"scale": 1,
"rotation": 90,
"offsetX": 0,
"offsetY": 0,
"transform": [0, 1, 1, 0, 0, 0],
"width": 841.89,
"height": 595.276,
"annotations": []
}
object
Emitted when user has interaction with any annotation in document view.
<template>
<VuePDF :pdf="pdf" :page="2" @annotation="annotationEvent" />
</template>
const annotationEvent = (value) => {
console.log(value);
},
Annotations values has the following struct:
Property | Value |
---|---|
type | Annotation type, posible values: internal-link , link , file-attachment , form-text , form-select , form-checkbox , form-radio , form-button |
data | Annotation associated data |
internal-link
fires when user clicks a link that redirects to other content within the document
{
"type": "internal-link",
"data": {
"referencedPage": 3,
"offset": {
"left": 82,
"bottom": 716
}
}
}
link
fires when user clicks an external link
{
"type": "link",
"data": {
"url": "mailto:aor@testmail.com",
"unsafeUrl": "mailto:aor@testmail.com"
}
}
file-attachment
fires when user double-clicks an attachment link
{
"type": "file-attachment",
"data": {
"filename": "utf8test.txt",
"content": [ 83, 101, 110, ... ] // Uint8Array
}
}
form-text
fires when user inputs a value in an textfield element
{
"type": "form-text",
"data": {
"fieldName": "firstname",
"value": "Aldo Hernandez"
}
}
form-text
fires when user inputs a value in an one-select or multi-select element
{
"type": "form-select",
"data": {
"fieldName": "gender",
"value": [
{
"value": "M",
"label": "Male"
}
],
"options": [
{
"value": "",
"label": "-"
},
{
"value": "M",
"label": "Male"
},
{
"value": "F",
"label": "Female"
}
]
}
}
form-checkbox
fires when user changes a checkbox field
{
"type": "form-checkbox",
"data": {
"fieldName": "newsletter",
"checked": true
}
}
form-radio
fires when user changes a radio field
{
"type": "form-radio",
"data": {
"fieldName": "drink",
"value": "Wine",
"defaultValue": "Beer",
"options": ["Water", "Beer", "Wine", "Milk"]
}
}
form-button
fires when user click on push button
{
"type": "form-button",
"data": {
"fieldName": "Print",
"actions": {
"Mouse Down": ["Print()"]
},
"reset": false
}
}
FAQs
PDF component for Vue 3
The npm package @tato30/vue-pdf receives a total of 13,005 weekly downloads. As such, @tato30/vue-pdf popularity was classified as popular.
We found that @tato30/vue-pdf demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.