java列印pdf,Java列印乘法表

本文目錄一覽:

java調用本地印表機實現列印PDF文件,怎麼做

使用虛擬印表機pdf factory即可實現,而且其他格式文件只要是能夠列印,選擇這個虛擬印表機,都可以做成PDF文件,很簡單實用,一勞永逸。

如何在java中用javascript來列印pdf

純Java的解決方案:

我們首先想到的自然就是JDK1.4提供的JPS(Java Printing Service)啦,不過,這東西雖然說支持PDF的Flavor,但是,不管是個人實驗還是網上他人的評論,好像根本就是useless,可能如果說你 的印表機Driver支持PDF的Flavor的話,JPS會檢測到你的driver的這個特性,能夠成功的列印PDF文檔出來,但是,大部分情況下,這 種情形是不成立的,故此JPS死路一條啦!

讓我們看看PDF的老家Adobe那裡有沒有什麼法寶,我們發現一個Viewer Bean的組件,說是可以將PDF以Bean組件的方式潛入到Swing中,哇,太爽了,不過慢著,協議上說不提供任何支持,也不保證不出任何問題,管那 么些,試過再說,一實驗才知道,靠,Exception頻發,而且這個組件較為陳舊,還是扔一邊吧!

還有一個PDFBox,Open Source的,不過對中文支持不好,而且好像開發進度也不是很好,沒有發布一個正式的版本,基本上不能用於生產環境;

最後,求助於Commercial的產品吧,實驗了一下ActiveTree的JPrint,感覺不錯,完全可以勝任我們的需求而且恰到好處,不過授權費 很貴,Email問過之後的答覆是2000USD的最低購買,呵呵,雖然日本人很有錢,但也心疼這個銀子啊,所以最終也得作罷!(ActiveTree的 授權其實挺令我ft的,他其實在2003年的時候是可以免費使用的,但之後就變卦了,呵呵,當時記得我還給提過一些bug之類,算了,人家做出這個東西也 不容易)

其他商業產品也是價格不菲,所以,基本上純Java的solution到這裡就否決了,讓我們看Java-Com的解決方案吧!

Java-Com 的解決方案:

在前一條路走不通之後,我痛定思痛,決定轉向自己不熟悉的領域,ms的領地,我打算從Java中調用Com組件,由Com組件來幫助我們實現PDF的列印 工作,不夠這條路也不是一帆風順那!

我們知道,Acrobat Reader在發布的時候會隨同發布一個支持瀏覽器的com組件用來manipulate他的這個PDF文檔格式,所以,我們想要本地調用這個隨同發布的 Com組件來實現PDF列印。雖然Version5,6,7的這個組件格式不一樣(5,6是以ocx的格式發布,7是以dll的格式發布),但是,不管那 么些,先從7開始吧!

要調用com,那麼我們需要一個從java到com的Bridge,所以,jacob第一個躍入我的腦海,因為之前就用過嘛!但是麻煩來了,我們並不知道 這個com組件提供了那些調用介面啊!哎,沒辦法,回學校求教熟悉.net的同學,給好不容易弄出幾個需要的調用方法(哎,可憐我的周末啊),星期一就回 來用jacob調用啦,可是左試右試就是一直拋異常,我那個氣啊!難道是jacob的為問題?!我就又找了jcom和jcom2等類似的產品,但jcom 全是日文文檔,沒有辦法,而jcom2估計也是一個德行(我忘了為什麼當初否決了這個),所以就決定試一試商業產品吧!

這方面的商業產品主要有J-Integra,JPanel(好像叫這個名字)以及一個叫JNIWrapper的產品(這個是一個人用用來演示在java中 使用Acrobat5列印PDF的時候提到的)。這些商業產品好的地方就是他可以根據某個你要調用的com組件為你自動生成相應的Proxy對象java 代碼,這樣你就可以直接調用你熟悉的java代碼了。像jacob等開源項目,如果給出一個類似的code generation工具的話,就完全不遜於這些商業產品啦。鑒於商業產品的價格,我最終還是否決了這些(日本人其實也聽摳門的)。

這樣,Java-com也對這個問題沒轍了。

不過,最後在我的解決方案中,我還是使用了Jacob,這是後話,暫且不提…

那我們考慮一下,如果PDF列印不行,列印其他格式行不行?!比如圖片,這個JPS可以完全列印,所以,我們找一下有沒有將PDF格式轉換為其他格式的工 具吧!

PDF格式轉換的解決方案:

在這個領域,主要的就是有GhostScript/GView和ImageMagick,前者可以將PDF格式轉換為PostScript格式,但是好像 GhostScript也不能用JPS完全列印出來;而後者是一個將PDF轉換為Image的API工具,他的Java實現叫JMagick,但他有一個 跟GhostScript同樣的問題,就是要轉換,就必須在本地安裝,然後通過命令行的方式調用,這個顯然也不是很好,而且集成性很差,還是作罷!

剩下的一個是命令行調用啦,這是從itext網站找到的,你可以通過在命令行運行AcroRd32 /p /h “path to PDF file”這樣的命令來列印你要列印的PDF文件,當然,你可以在PDF文件生成後就將他們依次放入一個批處理文件來執行這些列印命令,但是這個方案唯一 的問題就是,每列印一個文件都會啟動一個Acrobat Reader窗口而且必須手動關閉,這現在不能滿足目前的系統要求。

好了,所有的方案基本上都羅列完了,也沒有找到一個可行的方案:-(

(沒有銀子嘛,不然Activetree的JPrint不錯的說)

這些東西差不多鬱悶了我3,4天吧,那幾天簡直就是bored to death.

不過,在鬱悶的這幾天的結尾,卻有一道靈光閃過我的腦海…

能不能說啟動一個列印service,當文檔要列印的時候,直接發送給它就行了那?!而恰好我發現一段在網頁中載入PDF文檔的Javascript代 碼,而且完全可以使用js來控制PDF的列印,所以,最終的這個方案就浮出水面了 …

1-使用jacob啟動一個IE進程,並隱藏IE窗口;

if(ieAutomation == null)

ieAutomation = new ActiveXComponent(“InternetExplorer.Application”);

ieAutomation.setProperty(“Visible”,new Variant(false));

2-PDF前端在生成PDF文件之後發送生成後的文件到JacobPDFPrinter,JacobPDFPrinter根據出入的PDF文件的全路徑使 用Velocity模板引擎動態生成一個包含使用Javascript代碼實現的PDF列印邏輯的HTML文檔(當然,使用Velocity生成文檔這部 分邏輯我們單獨抽出到VeloIEPrinterGenerator類中);

3-在HTML生成之後,在JacobPDFPrinter中就可以使用jacob調用IE的Navigate2,將IE重定向到剛才生成的這個HTML 文件啦,這樣,IE就會在後台調用JS代碼將PDF列印到默認印表機;

4-列印成功之後,清除臨時動態生成的HTML文件;

5-當主程序退出之前,Quit後台IE進程。

以上就是我能給出的一個solution,並不完美,但it works.

需要注意的幾個問題是:

(1)需要設置IE的一個高級選項,運行本地腳本運行;

(2)因為Java和Com線程模型的不一致,導致在最終Quit後台IE進程的時候會拋出Com調用異常,因為對於Win平台API以及相關編程模型不 是很熟悉,所以,這個問題需要求助於別人幫忙解決;

(3)IE在執行JS列印PDF的時候,同樣會後台啟動Acrobat的一個進程,而這個進程我們程序中無法控制其生命周期,所以,主程序退出後,我們沒 有辦法同時kill這個進程,好在不管我們運行多少次,這個進程在後台只有一個,所以,性能負擔不是很大;

轉載

怎麼用java代碼生成pdf文檔

import java.io.File;  

import java.io.FileOutputStream;  

import java.io.IOException;  

 

import com.itextpdf.text.*;  

import com.itextpdf.text.pdf.PdfWriter;  

 

public class PdfTest  

{  

    public static void main(String[] args) throws Exception  

    {  

        Document pdfDoc = new Document();  

        // 將要生成的 pdf 文件的路徑輸出流  

        FileOutputStream pdfFile =   

            new FileOutputStream(new File(“F:/study/test/firstPdf.pdf”));  

 

        // pdf 文件中的一個文欄位落  

        Paragraph paragraph = new Paragraph(“My first PDF file with an image …”);  

        Image image = Image.getInstance(“F:/study/test/洛克 李.jpg”);  

          

        // 用 Document 對象、File 對象獲得 PdfWriter 輸出流對象  

        PdfWriter.getInstance(pdfDoc, pdfFile);  

        pdfDoc.open();  // 打開 Document 文檔  

          

        // 添加一個文欄位落、一張圖片  

        pdfDoc.add(paragraph);  

        pdfDoc.add(image);  

      

        pdfDoc.close();  

    }  

}

別人編寫好的jasper,Java調用列印pdf怎麼控制其紙張大小

這個從我了解的角度來說只有兩個方面:

設計jasper前,設定紙張的大小,選擇合適的尺寸 建立jasper。

列印的時候手動選擇紙張大小。

JAVA列印pdf為什麼不顯示㮾字?

建議添加spire.pdf.jar為依賴,然後用下面的代碼試試

import com.spire.pdf.*;

import java.awt.print.*;

public class Print {

  public static void main(String[] args) {

      //載入文檔

      PdfDocument pdf = new PdfDocument();

      pdf.loadFromFile(“Sample.pdf”);

      PrinterJob loPrinterJob = PrinterJob.getPrinterJob();

      PageFormat loPageFormat  = loPrinterJob.defaultPage();

      Paper loPaper = loPageFormat.getPaper();

      //刪除默認頁邊距   loPaper.setImageableArea(0,0,loPageFormat.getWidth(),loPageFormat.getHeight());

      //設置列印份數

      loPrinterJob.setCopies(2);

      loPageFormat.setPaper(loPaper);

      loPrinterJob.setPrintable(pdf,loPageFormat);

      try {

          loPrinterJob.print();

      } catch (PrinterException e) {

          e.printStackTrace();

      }

  }

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192719.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 10:29
下一篇 2024-12-01 10:29

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎教程第三版PDF下載

    熟練掌握Python編程語言可以讓你輕鬆地用代碼解決很多問題,Python基礎教程第三版是一本適合初學者的Python教程。本文將從幾個方面詳細介紹Python基礎教程第三版PDF…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論