feat(form-filler): enable XFA support and use original file bytes
Use original file bytes instead of saved PDF doc to preserve XFA streams. This ensures PDF.js can fully render XFA-based forms by also enabling the XFA flag in the viewer.
This commit is contained in:
@@ -183,7 +183,10 @@
|
|||||||
|
|
||||||
async function loadPDF(data) {
|
async function loadPDF(data) {
|
||||||
try {
|
try {
|
||||||
const loadingTask = pdfjsLib.getDocument({ data });
|
const loadingTask = pdfjsLib.getDocument({
|
||||||
|
data,
|
||||||
|
enableXfa: true,
|
||||||
|
});
|
||||||
pdfDocument = await loadingTask.promise;
|
pdfDocument = await loadingTask.promise;
|
||||||
pdfViewer.setDocument(pdfDocument);
|
pdfViewer.setDocument(pdfDocument);
|
||||||
linkService.setDocument(pdfDocument);
|
linkService.setDocument(pdfDocument);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { showLoader, hideLoader, showAlert } from '../ui.js';
|
import { showLoader, hideLoader, showAlert } from '../ui.js';
|
||||||
import { downloadFile } from '../utils/helpers.js';
|
import { downloadFile, readFileAsArrayBuffer } from '../utils/helpers.js';
|
||||||
import { state } from '../state.js';
|
import { state } from '../state.js';
|
||||||
|
|
||||||
let viewerIframe: HTMLIFrameElement | null = null;
|
let viewerIframe: HTMLIFrameElement | null = null;
|
||||||
@@ -7,7 +7,7 @@ let viewerReady = false;
|
|||||||
|
|
||||||
|
|
||||||
export async function setupFormFiller() {
|
export async function setupFormFiller() {
|
||||||
if (!state.pdfDoc) return;
|
if (!state.files || !state.files[0]) return;
|
||||||
|
|
||||||
showLoader('Loading PDF form...');
|
showLoader('Loading PDF form...');
|
||||||
const pdfViewerContainer = document.getElementById('pdf-viewer-container');
|
const pdfViewerContainer = document.getElementById('pdf-viewer-container');
|
||||||
@@ -30,7 +30,10 @@ export async function setupFormFiller() {
|
|||||||
window.addEventListener('message', async (event) => {
|
window.addEventListener('message', async (event) => {
|
||||||
if (event.data.type === 'viewerReady') {
|
if (event.data.type === 'viewerReady') {
|
||||||
viewerReady = true;
|
viewerReady = true;
|
||||||
const pdfBytes = await state.pdfDoc.save();
|
// Use the original uploaded bytes so that XFA streams remain intact
|
||||||
|
// and PDF.js can fully render XFA-based forms.
|
||||||
|
const file = state.files[0];
|
||||||
|
const pdfBytes = await readFileAsArrayBuffer(file);
|
||||||
viewerIframe?.contentWindow?.postMessage(
|
viewerIframe?.contentWindow?.postMessage(
|
||||||
{ type: 'loadPDF', data: pdfBytes },
|
{ type: 'loadPDF', data: pdfBytes },
|
||||||
'*'
|
'*'
|
||||||
|
|||||||
Reference in New Issue
Block a user