将视图绘制到PrintedPdfDocument画布中时,PDF的字节大小会明显增加,尤其是在视图包含位图(例如ImageView)时。

减小最终大小的一种方法应该是PrintAttributes中的resolution字段,例如:

PrintAttributes printAttrs = new PrintAttributes.Builder().
                setColorMode(PrintAttributes.COLOR_MODE_COLOR).
                setMediaSize(PrintAttributes.MediaSize.ISO_A4).
                setResolution(new Resolution("zooey", PRINT_SERVICE,hDpi,vDpi)).
                setMinMargins(Margins.NO_MARGINS).
                build();
PdfDocument document = new PrintedPdfDocument(this, printAttrs);


但是,无论我选择作为hDpi和vDpi,PDF的最终大小都不会改变。

难道我做错了什么?如何缩小PDF尺寸?

最佳答案

根据我的经验,“分辨率”设置不会影响PrintedPDfDocument文件生成的最终结果。

下面是PrintedPDfDocument构造函数的源代码。

private static final int POINTS_IN_INCH = 72;

public PrintedPdfDocument(Context context, PrintAttributes attributes) {
    MediaSize mediaSize = attributes.getMediaSize();

    // Compute the size of the target canvas from the attributes.
    mPageWidth = (int) (((float) mediaSize.getWidthMils() / MILS_PER_INCH)
            * POINTS_IN_INCH);
    mPageHeight = (int) (((float) mediaSize.getHeightMils() / MILS_PER_INCH)
            * POINTS_IN_INCH);

    // Compute the content size from the attributes.
    Margins minMargins = attributes.getMinMargins();
    final int marginLeft = (int) (((float) minMargins.getLeftMils() / MILS_PER_INCH)
            * POINTS_IN_INCH);
    final int marginTop = (int) (((float) minMargins.getTopMils() / MILS_PER_INCH)
            * POINTS_IN_INCH);
    final int marginRight = (int) (((float) minMargins.getRightMils() / MILS_PER_INCH)
            * POINTS_IN_INCH);
    final int marginBottom = (int) (((float) minMargins.getBottomMils() / MILS_PER_INCH)
            * POINTS_IN_INCH);
    mContentRect = new Rect(marginLeft, marginTop, mPageWidth - marginRight,
            mPageHeight - marginBottom);
}


您可以看到该代码未使用DPI参数,它使用72作为固定DPI来计算页面宽度/高度,我认为这是错误的。

当我尝试使用PrintedPDfDocument API在平板电脑上打印15页网页时,得到了1G PDF文件。

因此,我对您的问题的建议是使用另一个PDF生成库,直到稍后PrintedPDfDocument证明自己。

祝好运。

关于android - Android:PrintedPdfDocument分辨率无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30902727/

10-09 03:25