Как избавиться от лишних лишних страниц при конвертации документа goole в pdf через google-apps-script? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть старый скрипт, который (среди прочего) преобразует документ Google в PDF.Раньше все работало нормально, но теперь в pdf-версии файла появляются две лишние пустые страницы.

Я только что обнаружил, что эта проблема затрагивает также пункт меню «скачать в формате PDF» в документах Google.В этом случае есть ряд обходных путей, но мне нужен обходной путь для google-apps-script.

В этом посте решение аналогичной проблемы, похоже, заключается в тонкой настройкеразмер страницы.Я пробовал что-то подобное, но это не тривиально.Я также попробовал некоторые другие (случайные) варианты для размера страницы и полей, но безрезультатно.

Ниже я привожу минимальный рабочий пример.Он должен создать файл документа «test» и его pdf-версию «test.pdf» в папке на главном диске.

Любая помощь в избавлении от двух дополнительных страниц приветствуется.

Спасибо

function myFunction() {
  // this function 
  // - creates a google document "test", 
  // - writes "this is a test" inside it
  // - saves and closes the document
  // - creates a pdf version of the document, called "test.pdf"
  //
  // the conversion is ok, except two extra blank pages appear in the pdf version.


  // create google document
  var doc = DocumentApp.create('test');
  var docFile = DriveApp.getFileById( doc.getId() );
  // set margins (I need landscape layout)
  // this is an attempt to a solution, inspired by https://stackoverflow.com/questions/18426817/extra-blank-page-when-converting-html-to-pdf
  var body = doc.getBody();
  body.setPageHeight(595.2).setPageWidth(841.8);   
  var mrg = 40; // in points
  body.setMarginTop(mrg).setMarginBottom(mrg);   
  body.setMarginLeft(mrg).setMarginRight(mrg);   
  // write something
  body.appendParagraph('this is a test').setHeading(DocumentApp.ParagraphHeading.HEADING2).setAlignment(DocumentApp.HorizontalAlignment.CENTER);  
  // save and close file
  doc.saveAndClose();
  // convert file to pdf
  var docblob = docFile.getAs('application/pdf');
  // set pdf name
  docblob.setName("test.pdf");
  // save pdf file
  var file = DriveApp.createFile(docblob);

}

1 Ответ

0 голосов
/ 18 октября 2018

Я нашел источник проблемы и решение в этом посте на форуме по продуктам Google, датируемого 8 месяцев назад.

Дополнительные страницы появляются в pdf, если выбранная опция -> макет печати не отмечена.Я провел еще несколько тестов с моими аккаунтами и коллегами.Результаты совпадают:

  1. при просмотре -> макет печати не отмечен, две дополнительные страницы появляются в pdf-версии документа
  2. при просмотре -> проверка макета печати pdfВерсия документа содержит ожидаемое количество страниц.
  3. этот параметр влияет также на службы documentApp в Google Apps Script.То есть: приведенный выше сценарий создает ожидаемую версию PDF только в том случае, если в Google Документах установлен флажок «view-> print layout».

Я не вижу, как такое поведение может быть «функцией», так что я думаю, что это ошибка.Кстати, «макет печати», похоже, не оказывает никакого видимого влияния на мои документы (кроме как испортить PDF-версию).Я удивлен, что через 8 месяцев ошибка все еще существует.

Номер 3 выше удивил меня, потому что я не думал, что опция, установленная вручную в (любом) документе Google, повлияет на мои сценарии.В настоящее время я ищу способ установки параметра «макет печати» из скрипта.Пока мне не повезло с этим.

...