@@ -9,7 +9,7 @@ import { ipcRenderer } from 'electron';
99// @ts -ignore
1010import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry' ;
1111import { StandardFonts , StandardFontValues } from 'pdf-lib' ;
12- import { Rect , Textbox } from 'fabric/fabric-impl' ;
12+ import { Rect } from 'fabric/fabric-impl' ;
1313import { TwitterPicker } from 'react-color' ;
1414import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' ;
1515import { SizeMe } from 'react-sizeme' ;
@@ -18,6 +18,7 @@ import { useLocation } from 'react-router-dom';
1818import { IconName } from '@fortawesome/fontawesome-svg-core' ;
1919import { FabricJSCanvas , useFabricJSEditor } from '../fabric/Canvas' ;
2020import { readExcelMeta } from '../utils/excel' ;
21+ import { Fieldbox } from '../fabric/editor' ;
2122
2223pdfjs . GlobalWorkerOptions . workerSrc = pdfjsWorker ;
2324export interface DataHeader {
@@ -27,11 +28,8 @@ export interface DataHeader {
2728
2829type Align = 'left' | 'center' | 'right' ;
2930
30- interface MyTextbox extends Textbox {
31- index : number ;
32- }
3331export interface CanvasObjects {
34- objects : [ MyTextbox | Rect ] ;
32+ objects : [ Fieldbox | Rect ] ;
3533 clientWidth : number ;
3634}
3735export interface RenderPdfState {
@@ -66,6 +64,7 @@ const PdfEditor = () => {
6664 const [ fill , setFill ] = useState ( '#000' ) ;
6765 const [ showPicker , setShowPicker ] = useState ( false ) ;
6866 const [ align , setAlign ] = useState < Align > ( 'left' ) ;
67+ const [ renderType , setRenderType ] = useState ( 'text' ) ;
6968
7069 const [ pdfFile , setPdfFile ] = useState ( '' ) ;
7170 const [ excelFile , setExcelFile ] = useState ( '' ) ;
@@ -213,6 +212,10 @@ const PdfEditor = () => {
213212 } ) ) ;
214213
215214 const fontSizes = [ 8 , 10 , 12 , 14 , 16 , 18 , 24 , 30 , 36 , 48 , 60 ] ;
215+ const renderTypes = [
216+ { value : 'text' , label : 'Text' } ,
217+ { value : 'qrcode' , label : 'QR code' } ,
218+ ] ;
216219
217220 const handleKeyDown = ( key : string ) => {
218221 if ( selectedObject ) {
@@ -258,17 +261,19 @@ const PdfEditor = () => {
258261 fontSize,
259262 fill,
260263 textAlign : align as string ,
264+ renderType,
261265 } ) ;
262266
263267 setCurrentState ( getCurrentState ( ) ) ;
264- } , [ fontFamily , fontSize , fill , align ] ) ;
268+ } , [ fontFamily , fontSize , fill , align , renderType ] ) ;
265269
266270 useEffect ( ( ) => {
267- const text = selectedObject as Textbox ;
271+ const text = selectedObject as Fieldbox ;
268272 setFontFamily ( text ?. fontFamily || 'Helvetica' ) ;
269273 setFontSize ( text ?. fontSize || 16 ) ;
270274 setFill ( ( text ?. fill as string ) || '#000' ) ;
271275 setAlign ( ( text ?. textAlign as Align ) || 'left' ) ;
276+ setRenderType ( text ?. renderType || 'text' ) ;
272277 } , [ selectedObject ] ) ;
273278
274279 useEffect ( ( ) => {
@@ -292,7 +297,7 @@ const PdfEditor = () => {
292297 }
293298
294299 setCombinePdf ( currentState . combinePdf ) ;
295- ipcRenderer . invoke ( 'save-config' , currentState ) ;
300+ ipcRenderer . invoke ( 'save-config' , getCurrentState ( ) ) ;
296301 }
297302 } , [ currentState ] ) ;
298303
@@ -460,10 +465,23 @@ const PdfEditor = () => {
460465 selectedObject && ! formLayout ? '' : 'opacity-50 cursor-default'
461466 } `}
462467 >
468+ < select
469+ className = "w-24"
470+ onChange = { ( e ) => setRenderType ( e . target . value ) }
471+ value = { renderType }
472+ disabled = { ! selectedObject }
473+ >
474+ { renderTypes . map ( ( r ) => (
475+ < option value = { r . value } key = { r . value } >
476+ { r . label }
477+ </ option >
478+ ) ) }
479+ </ select >
480+
463481 < select
464482 onChange = { ( e ) => setFontFamily ( e . target . value ) }
465483 value = { fontFamily }
466- disabled = { ! selectedObject }
484+ disabled = { ! selectedObject || renderType !== 'text' }
467485 >
468486 { fonts . map ( ( { label, value } ) => (
469487 < option value = { value } key = { value } >
@@ -478,7 +496,7 @@ const PdfEditor = () => {
478496 setFontSize ( parseInt ( e . target . value , 10 ) || 16 )
479497 }
480498 value = { fontSize }
481- disabled = { ! selectedObject }
499+ disabled = { ! selectedObject || renderType !== 'text' }
482500 >
483501 { fontSizes . map ( ( v ) => (
484502 < option value = { v } key = { v } >
@@ -487,7 +505,11 @@ const PdfEditor = () => {
487505 ) ) }
488506 </ select >
489507
490- < section className = "flex items-center justify-center border-t border-b rounded-sm" >
508+ < section
509+ className = { `flex items-center justify-center border-t border-b rounded-sm ${
510+ renderType !== 'text' ? 'opacity-50' : ''
511+ } `}
512+ >
491513 { [ 'left' , 'center' , 'right' ] . map ( ( al ) => (
492514 < button
493515 type = "button"
@@ -505,12 +527,18 @@ const PdfEditor = () => {
505527 </ section >
506528
507529 < div
508- className = "p-2 border-2 border-white rounded shadow outline-none w-7 h-7 focus:outline-none focus:ring-2 focus:ring-blue-500"
530+ className = { `p-2 border-2 border-white rounded shadow outline-none w-7 h-7 focus:outline-none focus:ring-2 focus:ring-blue-500 ${
531+ renderType !== 'text' ? 'opacity-50 cursor-default' : ''
532+ } `}
509533 style = { { backgroundColor : fill } }
510- onClick = { ( ) => selectedObject && setShowPicker ( true ) }
534+ onClick = { ( ) =>
535+ selectedObject && renderType === 'text' && setShowPicker ( true )
536+ }
511537 role = "button"
512538 aria-labelledby = "pick"
513- onKeyPress = { ( ) => selectedObject && setShowPicker ( true ) }
539+ onKeyPress = { ( ) =>
540+ selectedObject && renderType === 'text' && setShowPicker ( true )
541+ }
514542 tabIndex = { 0 }
515543 />
516544 { showPicker ? (
0 commit comments