3

私はこのコードでpdfを印刷しようとしました:

package imprimir;

import java.io.*;
import java.awt.print.*;
import java.awt.print.PrinterJob.*;
import java.awt.print.PageFormat.*;

public class Imprimir {

    static public void main(String[] args) {
        PrinterJob job = PrinterJob.getPrinterJob();
        PageFormat pf = job.defaultPage();
        Paper paper = new Paper();
        paper.setSize(612.0, 832.0);
        double margin = 10;
        paper.setImageableArea(margin, margin, paper.getWidth() - margin, paper.getHeight() - margin);
        pf.setPaper(paper);
        pf.setOrientation(PageFormat.LANDSCAPE);
        job.setPrintable(new ObjetoDeImpresion(), pf);
        job.setJobName("funciona?");
        try {
            job.print();
        } catch (PrinterException e) {
            System.out.println(e);
        }
    }
}


package imprimir;

import java.awt.*;
import java.awt.print.*;

public class ObjetoDeImpresion implements Printable {

    public int print(Graphics g, PageFormat f, int pageIndex) {
        if (pageIndex == 0) {
            g.drawString("Hola ivan", 100, 200);
            return PAGE_EXISTS;
        } else {
            return NO_SUCH_PAGE;
        }
    }
}

また、インターネット上の他のさまざまな方法からも使用できますが、私が試したすべての方法で、ドキュメントを印刷すると、次のように奇数と文字が印刷されます。

% PDF ||1.6
endobobj <</linerrized 1/L 20597/O 40/E 14115/N 1/T ............
xref
37 34
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
...
..
..
trailer
<</Size...... 

ドキュメントの印刷を手伝ってくれる人はいますか?

4

3 に答える 3

4

Apache の PDFBox の方がニーズに適していると思います ( http://pdfbox.apache.org/ )。

コード内に収まる方法は次のとおりです。

static public void main(String[] args) {
    PrinterJob job = PrinterJob.getPrinterJob();
    PageFormat pf = job.defaultPage();
    Paper paper = new Paper();
    paper.setSize(612.0, 832.0);
    double margin = 10;
    paper.setImageableArea(margin, margin, paper.getWidth() - margin, paper.getHeight() - margin);
    pf.setPaper(paper);
    pf.setOrientation(PageFormat.LANDSCAPE);

    // PDFBox
    PDDocument document = PDDocument.load("yourfile.pdf");
    job.setPageable(new PDPageable(document, job));

    job.setJobName("funciona?");
    try {
        job.print();
    } catch (PrinterException e) {
        System.out.println(e);
    }
}

org.apache.pdfbox.PrintPDF のソースを見ると、これに関する詳細情報を見つけることができます。

于 2013-06-18T14:58:56.527 に答える
0

PDFBox、PDFView、IText も試してみましたが、システムのゴーストスクリプトを使用して PDF を画像にレンダリングするのが最も効果的でした。

最初に PDF を一時ファイルに書き込み、次に gs を呼び出します。

        String command;
    if (System.getProperty("os.name").toLowerCase().contains("windows"))
    {
        command = "gswin32";
    }
    else
    {
        command = "gs";
    }

    String absolutePath = pngFile.getAbsolutePath();
    command = command + " -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE="
                + color.name()
                + " -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dFirstPage="
                + pageNo + " -dLastPage=" + pageNo + " -r" + dpi
                + " -sOutputFile=" + absolutePath + " "
                + pdfFile.getAbsolutePath();
    System.out.println(command);
    Process p = Runtime.getRuntime().exec(command);
    boolean success = false;
    for (int i = 0; i < 1200; i++) //wait for completion
    {
        try
        {
            p.exitValue();
            success = true;
            break;
        }
        catch (Exception e)
        {
            logger.trace(e.getMessage());
        }
        Thread.currentThread();
        Thread.sleep(200);
    }
    if (!success)
    {
        p.destroy();
    }
于 2013-11-29T12:40:21.080 に答える
0

最良のオプションは、iTEXT を使用することです

iText Web リンク

チュートリアル

チュートリアル #01

于 2013-06-18T14:34:48.730 に答える