瀏覽代碼

no message

master
[email protected] 2 月之前
父節點
當前提交
5810b35659
共有 1 個檔案被更改,包括 121 行新增0 行删除
  1. +121
    -0
      src/pages/pdf/index.js

+ 121
- 0
src/pages/pdf/index.js 查看文件

@@ -0,0 +1,121 @@
// src/App.js (Your 'pdfForm' page equivalent)
import React, { useEffect, useRef, useState } from 'react';
import './App.css'; // For basic styling
import axios from 'axios';

// Import your chosen commercial PDF SDK (e.g., PSPDFKit)
import PSPDFKit from 'pspdfkit';

function App() {
const viewerRef = useRef(null); // Ref for the DOM element where PDF will render
const instanceRef = useRef(null); // Ref for the PSPDFKit instance
const [pdfLoaded, setPdfLoaded] = useState(false);

useEffect(() => {
const loadPdfViewer = async () => {
if (viewerRef.current) {
try {
// 1. Fetch the blank PDF template from your Spring Boot backend
const response = await axios.get('http://localhost:8080/api/pdf/template', {
responseType: 'arraybuffer' // Essential for binary data
});
const pdfBlob = new Blob([response.data], { type: 'application/pdf' });
const pdfUrl = URL.createObjectURL(pdfBlob);

// 2. Initialize the PDF SDK (e.g., PSPDFKit)
const instance = await PSPDFKit.load({
container: viewerRef.current,
document: pdfUrl,
// Remember to add your SDK license key if applicable
// licenseKey: "YOUR_PSPDFKIT_LICENSE_KEY",
baseUrl: process.env.PUBLIC_URL + '/pspdfkit-lib/', // Path to SDK assets
// Enable form filling UI
formDesignerViewMode: PSPDFKit.FormDesignerViewMode.Enabled
});

instanceRef.current = instance;
setPdfLoaded(true);

// 3. Clean up on component unmount
return () => {
if (instance) {
instance.unload(); // Unload SDK instance
}
URL.revokeObjectURL(pdfUrl); // Revoke the Blob URL
};

} catch (error) {
console.error('Error loading PDF:', error);
}
}
};

loadPdfViewer();
}, []); // Empty dependency array means this runs once on mount

const handleSavePdf = async () => {
if (instanceRef.current) {
try {
// Export the filled PDF from the SDK as an ArrayBuffer
const arrayBuffer = await instanceRef.current.exportPDF();
const filledPdfBlob = new Blob([arrayBuffer], { type: 'application/pdf' });

// Create FormData to send the file to Spring Boot
const formData = new FormData();
formData.append('file', filledPdfBlob, 'filled_form.pdf');

// Send the filled PDF to your Spring Boot backend's save endpoint
const response = await axios.post('http://localhost:8080/api/pdf/saveFilled', formData, {
headers: {
'Content-Type': 'multipart/form-data' // Important for file uploads
}
});
console.log('PDF saved on server:', response.data);
alert('PDF saved successfully on server!');
} catch (error) {
console.error('Error saving PDF:', error);
alert('Failed to save PDF.');
}
}
};

const handlePrintPdf = () => {
if (instanceRef.current) {
// Trigger the SDK's built-in print functionality
instanceRef.current.print();
}
};

return (
<div className="pdf-form-page"> {/* This is your 'pdfForm' page */}
<header className="page-header">
<h1>Fill and Manage Your PDF Form</h1>
{pdfLoaded ? (
<div className="action-buttons">
<button onClick={handleSavePdf} className="action-button save-button">
Save Filled PDF
</button>
<button onClick={handlePrintPdf} className="action-button print-button">
Print PDF
</button>
</div>
) : (
<p>Loading PDF viewer...</p>
)}
</header>
<div
ref={viewerRef}
className="pdf-viewer-container"
style={{
width: '100%',
height: 'calc(100vh - 180px)', // Adjust height based on header/footer
border: '1px solid #ccc'
}}
>
{/* The PDF SDK will render the PDF viewer here */}
</div>
</div>
);
}

export default App;

Loading…
取消
儲存