которое в DOC вставляет текст из пользовательской формы. Текст всегда разный и разных размеров. Постоянное - это заголовки разделов. Перед новым заголовком обязательно использую body.appendPageBreak() , чтобы следующий раздел был с новой страницы.
Но, бывает редкая ситуация, когда последний параграф перед вставкой appendPageBreak() оказывается на последней строчке страницы и тогда следующая страница оказывается полностью пустая, так как ее занимает вставленный pageBreak. Нужно избежать этой пустой страницы и как-то определить, что текст занимает последнюю строчку в предыдущем листе и вставлять разрыв страницы не нужно.
Пытался найти вариант определить положение текста, кол-во страниц, последний номер страницы - безрезультатно, в docs api не нашел, а в appscript и подавно 😰
Есть ли у кого-то идеи, как можно-то (и можно-ли вообще) такую проблему победить?
п.с. не, конечно можно конвертировать во временные pdf до и после вставки разрыва страницы, посчитать сторонним API число страниц там и там, и, если не совпадает, значит pageBreak не вставлять. Но, я надеюсь, существует более элегантный способ 😂
Если правильно понял - то в голову пришел один костыльный вариант. Вместо одного документа для всех разделов - создавать новый документ для каждого раздела, а для набора таких документов создавать папку. Дальше либо работать с этим, либо как-то склеивать документы, если это возможно) Не совсем как вариани, но как пища для размышления
К сожалению, проблема расчета страниц не решена. Скорее всего это даже не проблема Документов, а верстальщика, не примите лично, но то разрывы есть то их нет, это какой-то Уральский, и автоматического компоновщика на бумагу, т.е. принтера. Могу привести несколько примеров, почему я так думаю, но не в этом суть. Суть в том, что Гугл даже не пытался решить эту проблему, а ей стлько лет, сколько используются Скрипты для компоновки Документов.
Я понял... Вобщем, костыльное решение заработало, с созданием копии документа, pdf до и pdf после appendBrake. А кол-во страниц в PDF считаю этой функцией function getNumberofPages() { var myFolder = DriveApp.getFoldersByName("Test").next(); var files = myFolder.searchFiles('title contains ".PDF"'); while (files.hasNext()) { var file = files.next(); var n = file.getBlob().getDataAsString().split("/Contents").length - 1; Logger.log("fileName: %s, totalPages: %s", file.getName(), n) } } Конечно, по времени ужас, анализ 7 брейков добавило + минуту к выполнению скрипта. Но за неимением другого и это решение)
Да, так можно решать. Правда, когда файлы по 50-100 страниц уже совсем плохо.
Та да.. но пока файлы по 10-20 страниц - временно покатит.
Для чего искать в папке pdf файлы если две версии pdf можете сравнить в блобах?
я так и делаю..скрипт, который я скинул, я взял отсюда //https://stackoverflow.com/questions/54019355/count-total-number-of-pages-in-pdf-file и переделал под мои нужды. Кстати, ссылка хорошая, несколько вариантов как считать число страниц pdf, может, кому-то пригодится
Обсуждают сегодня