2015-06-17 3 views
2

При рисовании видов в холст PrintedPdfDocument размер в байтах PDF может заметно увеличиваться, особенно если представление содержит растровые изображения (например, ImageView).Android: PrintedPdfDocument Разрешение не влияет

Один из способов уменьшить окончательный размер должны быть в поле разрешения в PrintAttributes, например:

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); 

Однако, что бы я ни выбрать, как ИПЧР и vDpi окончательного размера PDF не меняется.

Я что-то не так? Как уменьшить размер PDF?

ответ

1

Основываясь на моем опыте, параметр разрешения не влияет на окончательный результат создания файла 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 для расчета страницы ширина/высота, которую я полагаю неправильно.

У меня есть файл PDF 1G, когда я пытался распечатать 15 страниц веб-страницы на планшете с использованием API PrintedPDfDocument.

Итак, мое предложение по поводу вашего вопроса состоит в том, чтобы использовать другую библиотеку генерации PDF до тех пор, пока PrintedPDfDocument не докажет себя позже.

Удачи.

Смежные вопросы