ããããã¹ãŠå§ãŸã£ãæ¹æ³
ããã¯ãã¹ãŠãçŽ2幎åã«1ã€ã®å瀟ã§ERPãã©ãããã©ãŒã ãéçºããããšããå§ãŸããŸããã LinuxãéžæãããŸãããC++ / Qtã¹ã¿ãã¯ãPostgreSqlãããã³Webã®åé¢ã§ãã ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã¯C ++ / Qtã§å®è£ ãããåãå Žæã§ãããžãã¹ããžãã¯ã¯JSã€ã³ã¿ãŒããªã¿ãŒã¬ã€ã€ãŒãä»ããŠèšè¿°ãããŸããã ãªãå¥ã®è©±ãªã®ããããã§ã¯å°å·ã·ã¹ãã ãã©ã®ããã«éçºãããããæ€èšããŸãã
ãã³ã®æåã®ãµã³ãã«
HTML
æåã¯ããã¹ãŠã®ããã¥ã¡ã³ãã1Cããå°å·ãããŠããŸãããïŒ1Cã®æãšç€Ÿå ã®ç®¡çäŒèšã«ç¬èªã®ãERPãã䜿çšããŸãïŒããã¹ãŠã¯é 調ã§ããããèšç»ã¯ã·ã¹ãã ã«åãæ¿ããäºå®ã§ããã ãã®åŸãã·ã¹ãã ã«ã·ãŒã«ãåºå®ããå¿ èŠããããŸããã
æåã®ã¢ã€ãã¢ã¯ãHTMLãã©ãŒã ãã¬ã€ã¢ãŠãããããã°ã©ã ã§ããŒã¿ãå ¥åãããŠãŒã¶ãŒã«ãã©ãŠã¶ãŒã«htmlããŠãããããå°å·ã§ããããã«ããããšã§ããã
ããã«ããã€ãã®ãã¥ã¢ã³ã¹ãèŠã€ããŸããïŒ
- ãã¹ãŠã®ããã¥ã¡ã³ãã®äžã§ã0ãããã³ãã¬ãŒããäœæããå¿ èŠããããŸã
- ãšã³ããŠãŒã¶ãŒã¯htmlãç·šéã§ããŸãã
- ãããŒãžã£ãŒã¯Excelã§ããã€ãã®åæãäž»å°ããŸãã
- è€æ°ããŒãžã®ãã¡ã€ã«ãå°å·ãããšãã®è¡ã®æãè¿ãã®åé¡
ãã®çµæãããžã¹ãã£ã¯ã¹ïŒåäžããŒãžãã©ãŒã ïŒã®ã¢ããªã±ãŒã·ã§ã³ãå°å·ããããã®ãã³ãã¬ãŒãã1ã€ã ãäœæãããŸããããããã¯åŒãç¶ãæ£åžžã«äœ¿çšãããŠããŸã
Xlsx
2çªç®ã®ã¢ã€ãã¢ã¯ãXLSXããã¥ã¡ã³ãã§äœæ¥ããããšã§ããã Googleã¯ããã«QtXlsxWriterã©ã€ãã©ãªã«ã€ããŠããã³ãããåºããŸããã ãŸã ãªãã·ã§ã³ããããŸããã ãæçµçã«ã¯QtXlsxWriterã«èœã¡çããŸããã
ã©ã€ãã©ãªã§ã§ããããšïŒ
- xlsxãéããŠäœæããã»ã«å€ãèªã¿åã
- ã»ã«å€ã®å€æŽããã¡ã€ã«ã®ä¿å
- ã»ã«åœ¢åŒïŒå¢çç·ãå«ãïŒã§äœæ¥ãã
- è¡/åã®é«ã/å¹
- ã»ã«ãŠããªã³
- è¡/åã®ã°ã«ãŒãå
- ç»åæ¿å ¥
ããã«ãããä»ã®ã·ã¹ãã ïŒHi 1CïŒããxlsx圢åŒã®ããã¥ã¡ã³ããã³ãã¬ãŒã
èœãšãç©Žãããã«çŸããQtXlsxWriterã¯ãã³ãã¬ãŒãããã®ããã¥ã¡ã³ãã®èªã¿èŸŒã¿ãã»ã«åœ¢åŒã®åªå€±ïŒã©ãã/ã¢ãªã³ã°ãªã©ïŒããäžååãã«åŠçããŸããã ãxlsx圢åŒïŒèª°ãç¥ããªãå Žåãxlsxã¯xmlããã¥ã¡ã³ãã®ã»ãããå«ãzipã¢ãŒã«ã€ãïŒãæ°æéæãäžããåŸãããŒã«ã®ç°ãªãããŒãžã§ã³ã§ã¯ãxmlãã¡ã€ã«ã®å±æ§ãç°ãªãæ¹æ³ã§æ ŒçŽãããŠããããšãããããŸããã
<ta="0" b="1" />
ã©ã¡ãã
<ta="true" b="false" />
parsilã®å Žæã®QtXlsxWriterã¯1/0ã®ã¿ãtrue / falseã®å Žæã®ã¿ãããã³thisãšthatã®å ŽæããããŸãã ããããäœããåºå®ãããæããããŸãã
ãŸããQtXlsxWriterãä»ããŠxlsxãã¡ã€ã«ã圢æãããåŸãMS Officeã§éããšãããã宣èªããå§ããŠäžå¿«ãªç¬éããããŸããã
æ¬ãtest1.xlsxãã§ãèªãããšãã§ããªãã³ã³ãã³ããèŠã€ãããŸããã æ¬ã®å 容ã埩å ããŠã¿ãŠãã ããïŒ ãœãŒã¹ãä¿¡é Œããå Žå...
åæã«ãèŠèŠçã«éããåŸããã¹ãŠã®ããŒã¿ãé 眮ãããŸããã ãã ããäŸ¡æ Œè¡šãéããšãå€ãã®äžè¬ãŠãŒã¶ãŒïŒé¡§å®¢ïŒããã®ãããªã¡ãã»ãŒãžãæããããšããããŸãã
MS OfficeãšQtXlsxWriterãxmlãã¡ã€ã«ã«äœæéã貌ãä»ããŠæ€çŽ¢ããåŸã
libreoffice --headless --invisible --quickstart --convert-to xlsx test.xlsx --outdir valid_xlsx
ãããŠãçããŠããã®ã¯è¯ãããšã§ãããxlsxããã¥ã¡ã³ãã®åœ¢æã«é¢ããå¿ èŠãªã¬ããŒãçšã®å°ããªã³ãŒããäœæããããŠãŒã¶ãŒã«ã¢ããããŒããããå¿ èŠã«å¿ããŠäœæ¥ããMS Officeã¯ããããæãããªããªããŸããã 圌ãã¯ã°ã«ãŒã
èªåå
äŒç€Ÿãæé·ãã顧客ãå¢ããããã¥ã¡ã³ãïŒã¢ããªã±ãŒã·ã§ã³ã販売ãè«æ±æžãªã©ïŒãå¢ããå°å·ã«å€ãã®äœæ¥æéããããå§ããŸããã ããã«ãããã¥ã¡ã³ãã®äžéšã¯ãã·ã¹ãã ã®1Céšåããå°å·ãããŸããã ãã®åé¡ãäœããã®åœ¢ã§èªååããããšã«ããŸããã ããã«å ç«ã£ãŠïŒçŽ5ã7幎åïŒãWindows OLEã³ã³ãããŒïŒã³ã³ãããŒã¯Excelã§äœæããããã¡ã€ã«ãéãããå°å·èšå®ãèšå®ãããŠå°å·ã«éä¿¡ãããŸããïŒãä»ããŠå°å·ããçµéšããããŸããããå®éã«ã¯Linuxã§å転ããŠãã©ãã°ããŠãããã©ââãããã©ãŒã ã§ã¯ãããŸããããã§ã¯Windowsã¢ãžã¥ãŒã«ã¯å¿ èŠãããŸããã§ããïŒãã ããWindowsäžã®ããªã³ããµãŒããŒã¯æ¥µç«¯ãªãªãã·ã§ã³ãšèŠãªãããŠããŸããïŒã
ãã¹ãŠPDFã§
Linuxã«ã¯CUPSããããlprã³ãã³ãã䜿çšãããšãå°å·çšã®pdfãã¡ã€ã«ãç°¡åã«éä¿¡ã§ããŸãã ããã¯ãã ã®pdfã§ãããçææ¹æ³ãããããŸããã 解決çã¯ããã«èŠã€ãããŸããã
libreoffice --convert-to pdf 1.xlsx --headless
ããããããã¯ããã»ã©åçŽã§ã¯ãããŸããã§ããã ãã¡ã€ã«ã¯100ïŒ ã¹ã±ãŒã«ã§å€æãããããŒãžãµã€ãºïŒA4 / A3ãããŒãã¬ãŒã/ã©ã³ãã¹ã±ãŒããã€ã³ãã³ãïŒã«é©åããªãã£ãããããããã¹ãŠãæšæºãã©ã¡ãŒã¿ãŒïŒA4ãããŒãã¬ãŒãïŒã«åŸã£ãŠèª¿æŽãããŸããã LibreOfficeïŒLibreOffice Calcãæã§éãïŒã§ãããã®èšå®ãèšå®ããxlsxã§ä¿åããlibreoffice --convert-to pdfã§å€æãããšããã¹ãŠãã»ãŒå®ç§ã«æ©èœããããšãããããŸããã
- ã€ã³ãã³ããšããŒãžèšå®ãæ£ããåŠçãããŸããã
- ã¹ã±ãŒã«ã調æŽããå¿ èŠãããå Žåããã®ãã©ã¡ãŒã¿ãŒã¯ç¡èŠããã100ïŒ ã®ã¹ã±ãŒã«ã§å€æãããŸããã
- ãµã€ãº/ããŒãžæ°ã«åãèšå®ãããã°ããã¹ãŠãæ©èœããŸãã
ãã€ã³ã2ã«ã€ããŠãç§ã¯LibreOfficeã®ãµããŒããåæ¢ããŸããã圌ãããã®é£çµ¡ã楜ãã¿ã«ããŠããŸãã
ãã©ã°ã©ã3ã®å©ç¹ã¯æ£ããæ©èœããããšã§ããããããåºã«æ§ç¯ããããšã«ããŸããã 次ã«ãQtXlsxWriterã«ããŒãžèšå®ãæäœããæ¹æ³ãæããå¿ èŠããããŸãã xlsxããã¥ã¡ã³ãå ã®xmlãã¡ã€ã«ãçºèŠãããšããã®ããžãã¹ã«è²¬ä»»ã®ããå ŽæãèŠã€ãããŸãã
xl / worksheets / sheet1.xml
<worksheet> <sheetPr filterMode="false"> <pageSetUpPr fitToPage="false"/> </sheetPr> ... ... <pageMargins left="0.7875" right="0.7875" top="1.05277777777778" bottom="1.05277777777778" header="0.7875" footer="0.7875"/> <pageSetup paperSize="9" scale="50" firstPageNumber="0" fitToWidth="1" fitToHeight="1" pageOrder="downThenOver" orientation="portrait" usePrinterDefaults="false" blackAndWhite="false" draft="false" cellComments="none" useFirstPageNumber="false" horizontalDpi="300" verticalDpi="300" copies="1"/> ... </worksheet>
ããã§èå³æ·±ãã®ã¯ïŒ
pageMargins-ããã§ãã¹ãŠãæ確ã«ãªã£ããšæã
fitToPage-ãµã€ãº/ããŒãžæ°ã«åãããããŸãã¯ã¹ã±ãŒã«ã䜿çšãã
fitToWidth-å¹ ã®ããŒãžæ°
fitToHeight-é«ãã®ããŒãžæ°
ã¹ã±ãŒã«-ã¹ã±ãŒã«ïŒïŒ ïŒ
paperSize-ã·ãŒããµã€ãºïŒ9 = A4ïŒ
åã-瞊/暪
QtXlsxWriterã§ãããã®ãã©ã¡ãŒã¿ãŒã䜿çšããäœæ¥ãè¿œå ããŸããã äžå®å šãªã³ã³ãã³ãã®æçãå¥ã®ã·ãŒãã«å°å·ãããªãããã«ãé©åãªå Žæã«ã€ã³ãã³ãã䜿çšããŠxlsxããã¥ã¡ã³ãã圢æããã ãã§ãã ããã«ããããã¹ãŠãéåžžã«åçŽã§ãããšã¯éããŸããã§ããã
å°å·ãã
ã€ã³ãã³ããªãã§ãA4ããã¯ã®åãã®ã·ãŒãã«ã«ãŒãã·ãŒããå°å·ããå Žåã®ç¶æ³ãèæ ®ããŠãã ããã
ãã®å Žåãããã¥ã¡ã³ãã®å¹ ã1ããŒãžã«åãŸãå¿ èŠããããŸãã èšå®ãè¡ããŸãïŒ
fitToPage = false
fitToWidth = 1
fitToHeight = 100
pageMargins-ãã¹ãŠ0
ãããã®æ¡ä»¶äžã§ã¯ãfitToHeightã¯ãå°å·æã«äºæ³ãããããŒãžæ°ããã倧ããããšãããã£ãŠããå¿ èŠããããŸãã
ã«ãŒããªã¹ãã¯ãã«ãŒããšå ç·çªå·ãæã€é¡§å®¢ã®ãªã¹ãã瀺ãèŠåºãã§ãã ã©ã®é ä¿¡ãè¡ããããã«é¢ããæ å ±ã
ãã®ãŸãŸã«ããŠãããšãã·ãŒãã®æåŸã«ãã顧客æ å ±ãå«ããããã¯ã®äžéšãç Žæããäžéšãæåã®æåŸã«ãããäžéšã2çªç®ã®å é ã«ããå¯èœæ§ããããããã¯åãå ¥ããããŸããã
ãã®çµæã次ã®ã¢ãããŒããçãŸããŸããïŒããããæŸèæïŒã
æåã«ãA4ã·ãŒããµã€ãºãç¥ã£ãŠããŸãã
å¹ 21cm
é«ã29.7 cm
ãããŠãã³ã³ãã³ããã·ãŒãã®å¹ ã«åãããŠèª¿æŽãããããšãç¥ã£ãŠããŸãã ã³ã³ãã³ãã®çžå¯Ÿå§çž®çãèšç®ã§ããŸãïŒ
ã¹ã±ãŒã«=ã·ãŒãã®å¹ /ã³ã³ãã³ãã®å¹
ããã§ãã³ã³ãã³ãã®å¹ ãèšç®ããããã«ããã¹ãŠã®åã®å¹ ãè¿œå ããå¿ èŠããããŸããããã¯é£ãããããŸããã
double QXlsx::Document::columnWidth(int column);
ã©ã®æž¬å®åäœã§çµæãåŸããããã¯ãŸã£ããç解ã§ããŸããã§ããã ããããããã§æ£ãã解決çãèŠã€ããããšãã§ããŸãããæçµçã«ã¯ãããžãã¯çªå·5.10238ãçµéšçã«èŠã€ããããšã¯ã§ããŸããã§ãã
1 cm = 5.10238 e.sh. ïŒåå¹ ã®åäœïŒ
scale = 4_ * 5.10238 / sum(columnWidth)
次ã«ãã·ãŒãã®å¹ å šäœã«åãããããšãã§ããã³ã³ãã³ãã®ãµã€ãºãèšç®ããŸã
height=4_ * 28.3464567 / scale
è¡ã®é«ããe.i.v.sïŒè¡ã®é«ãã枬å®ããããã®åäœãã€ã³ã¿ãŒãããäžã§ãã®æ å ±ãèŠã€ãããŸããâ r.Height = ht * 28.3464567 // CMããã¹ãã¹ã¯ãªãããã€ã³ãã«å€æ "ïŒ
è¡ã®é«ãã¯æ¬¡ã®æ¹æ³ã§ç¢ºèªã§ããŸãã
double QXlsx::Document::rowHeight(int column);
heightãã©ã¡ãŒã¿ã䜿çšããŠãã³ã³ãã³ãã®é«ãã<= heightã§ããéã«ãã³ã³ãã³ããxlsxãã¡ã€ã«ã«ãã³ããŒã§æã¡èŸŒã¿ãŸãã æ°ãããããã¯Bãè¿œå ãããšãã«ãé«ãã®å¢çãè¶ ããå ŽåãBã®åã«å¿ èŠãªé«ãã®ç©ºã®è¡ãæ¿å ¥ããŠããããã¯Bãæ°ããè¡ããå°å·ãããããã«ããŸãã 空è¡ã®é«ãã¯ããããã¯Bã®åã«æ¿å ¥ãããã³ã³ãã³ãã®é«ãïŒsumïŒrowHeightïŒïŒãç¥ãããšã§èšç®ã§ããŸãã
ããã§ã¯ãã€ã³ãã³ãïŒpageMarginsïŒã䜿çšããããŒãžããŒã·ã§ã³ã®èšç®ã¯èæ ®ããŠããŸãããxmlããŒã¿ã«ã¯ãããã®å€æ°ã®å€ãã€ã³ãïŒ1ã€ã³ã= 2.54 cmïŒã§æ ŒçŽãããŠãããšããèšããŸããã
ãããã£ãŠãæ¢è£œã®èšå®ãšå°å·çšã®è¡ããšã®å èš³ãå«ãxlsxãã¡ã€ã«ãååŸãããŸãã 次ã«ãlibreoffice --convert-to pdfã䜿çšããŠpdfã«å€æãããšãããã¥ã¡ã³ããå°å·ããæºåãã§ããŸããã
å°å·ãããŸãŸã§ãïŒ
lpr -pFS-4300DN test.pdf
çŸåšããã£ããã·ã£ãŒïŒã¹ããŒãã«çãïŒãåããå€æ©èœããã€ã¹ã§ã®å°å·ã®èªååãè¡ã£ãŠããŸãã ãã§ã«ãã¹ãè£ çœ®ã§å°ãéãã§ããŠãLinuxã®ããšã§ã¯ãããã¯ãã¹ãŠã¹ããŒããªã³ã°ã®ããã ãã§ããã
å·Šäžé ã«ã¯ãªããã1ã€ããã¹ããŒãã«å°å·ïŒ
lpr -P printer_name -o StapleLocation="UpperLeft" order.pdf
çµãã
以äžã§ãã ãã®ã¿ã¹ã¯ã®å®è£ ã«å¯Ÿããä»ã®ã¢ãããŒããç¥ã£ãŠããããã§ãã
ãæž èŽããããšãããããŸããïŒ