【问题标题】:PDFBox: Writing HD images to PDFPDFBox:将高清图像写入 PDF
【发布时间】:2017-12-27 14:34:18
【问题描述】:

我正在尝试将使用 cameraa 拍摄的图像转换为 A4 PDF

    // Read image width and height
    float imageWidth = bitmap.getWidth();
    float imageHeight = bitmap.getHeight();

    // Read page width and height ignoring the margins
    float pageWidth = PDRectangle.A4.getWidth() - (margin_left_right * 2);
    float pageHeight = PDRectangle.A4.getHeight() - (margin_top_bottom * 2);

    Log.d("Image Resize", String.valueOf(imageWidth) + " x " + String.valueOf(imageHeight));
    Log.d("Image Resize", String.valueOf(pageWidth) + " x " + String.valueOf(pageHeight));

    # Image: 4160.0 x 3120.0
    # Page: 575.27563 x 821.8898

    Log.d("Image Resize", String.valueOf(requiredRatio));
    Log.d("Image Resize", String.valueOf(newImageWidth) + " x " + String.valueOf(newImageHeight));

    # Required ratio: 0.13828741
    # After scaling: 575 x 431

问题是大小为4160 x 3120 的图像,在调整为575 x 431 后,看起来非常像素化。

PDF 一般如何解决这个问题?使用contentStream.drawImage()写作时,有没有办法在600 dpi4160 x 3120


这个question 还支持这样一个事实,即如果在不调整大小等于图像高度和宽度的页面上编写,OP 只能看到 15% 的图像,应该如何缩小而不损失质量?

【问题讨论】:

    标签: android pdfbox


    【解决方案1】:

    有一个重载的drawImage() 方法可以做到这一点

    contentStream.drawImage(PDImageXObject, float x, float y)
    contentStream.drawImage(PDImageXObject, float x, float y, float height, float width)
    

    通过在contentStream.drawImage() 上指定明确的宽度和高度,可以实现这一点。例如,如果您想将图像显示小 4 倍但仍保持相同的分辨率,则可以使用

    scaleDownRatio = 0.25;
    pageSize = PDRectangle.A4;
    
    # this will draw image at bottom left corner
    PDImageXObject pageImageXObject = LosslessFactory.createFromImage(document, bitmap);
    contentStream.drawImage(pageImageXObject, 0, 0, bitmap.getWidth() * ratio, bitmap.getHeight() * ratio)
    
    # to center it you can use something like
    contentStream.drawImage(pageImageXObject, (pageSize.getWidth() - bitmap.getWidth() * ratio) / 2, (pageSize.getHeight() - bitmap.getHeight() * ratio) / 2, bitmap.getWidth() * ratio, bitmap.getHeight() * ratio)
    

    【讨论】:

    • 您对问题的回答与您对链接到的其他人的问题的回答相同。 WTF??
    • 没有办法直接指定 DPI,但是使用它,你可以调整它,如果你输入 DPI,你会得到打印的图像缩小而不下采样
    • @TilmanHausherr btw 那是 在我在这里写下这个答案之后发布了这个答案,因为这对那个人也有帮助..
    猜你喜欢
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多