2016-05-19 6 views
2

Как я могу сохранить область для печати на листе Excel в виде PDF?Как сохранить область печати в файле xlsx в PDF с помощью PHPExcel

Если мне нужно использовать другую библиотеку lib, то я могу работать с ней, но мне нужно, чтобы она была как можно ближе к тому же самому виду, как при печати из Excel, я знаю, что это сложно в целом.

+0

Заметил, что Dev перемещен в SpeadSheets, но я не могу этого сделать. –

ответ

2

В предположении, что вы работаете на сервере Windows, я собираюсь предложить другой подход: используя библиотеки классов COM или DOTNET, доступные в PHP на Windows (http://php.net/manual/en/book.com.php). Если нет, пожалуйста, игнорируйте мой ответ, поскольку он не будет работать.

Моя идея - использовать возможности макроса собственного Excel для выбора области печати и использования встроенной функции «Экспорт в PDF». Таким образом, форматы ячеек должны оставаться неповрежденными. Поэтому ваш .xlsw становится файлом .xlsm с добавлением необходимого кода VBA для выбора правильного диапазона (область печати) и экспорта в PDF. Затем библиотеки классов COM или DOTNET будут использоваться для установки электронной таблицы и доступа к открытым объектам (включая макросы). Вы также можете управлять экспортом через автоматизацию COM/DOTNET и не использовать макрос, если у вас нет контроля над самой электронной таблицей.

+0

Я нет, но это все еще вариант, который может оказаться ответом. его файл .xlsx, но если COM/DOTNET может инициировать экспорт или сохранять в формате PDF, то да, это будет работать, в зависимости от того, где он сохраняет файл. Мне нужно будет изучить это. –

+0

, посмотрев на это, это единственное жизнеспособное решение, которое я могу видеть до сих пор. и если я использую сетевые диски и скрипты на стороне окна, я все равно могу сделать это с помощью Linux. так что спасибо большое! –

+0

Рад, что это может быть полезно. Мне также нравится ваша идея использовать сетевые диски и сценарии WIN с Linux, чтобы контролировать все это. Напомнил, что у Amazon есть доступная виртуальная настольная платформа WIN (https://aws.amazon.com/workspaces/pricing/) с и без пакета MS Office для тех, у кого нет этих активов WIN в их распоряжении. –

1

Единственные параметры печати, доступные внутри dompdf, - paper size and orientation. Кроме того, область печати является специальной директивой, отличной от does not affect export to other formats. Думайте о области печати как специализированные маркеры и ничего больше.

В этом случае лучшим вариантом является освобождение или скрытие всех ячеек вне области печати через цикл до преобразования в pdf.

+0

Я попытаюсь обменять на DomPDF, так как в настоящее время я использую mPDF, чтобы узнать, какая разница, которая делает ... и я посмотрю на скрытие области печати с помощью кода .. Спасибо за ответ –

+0

Добро пожаловать, человек, я не думаю, что важно, какую библиотеку PDF вы используете. Главное, что область печати - это всего лишь маркер, используемый Excel, и об этом. Это действительно не настоящая область для печати в том смысле, о которой вы думаете. Скопление по ячейкам и удаление всего за пределами области, скорее всего, единственный выбор. –

+0

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

1
  1. XLSX файл - ZIP пакет (link)
  2. Информация о области печати, содержащейся в файле 'х/workbook.xml'. Получить содержимое 'XL/workbook.xml' с PHP ZipArchive класса и его ZipArchive :: getFromName метод
  3. Элемент, который содержит область печати < имя definedName = '_ xlnm.Print_Area' > </definedName > , Извлечение информации из этого тега с помощью PHP SimpleXMLElement класса и его метод SimpleXMLElement :: XPATH
  4. Когда добыла информация о печатаемой области:
    • сделать копию файла XLSX
    • извлечь файл с именем «х/листы/лист1» (или аналогичный)
    • петли через элементы файла в разделе «» sheetData и удалить ячейки, которые не включены в область печати
    • пронестись измененную XML на копию XLSX
  5. Преобразовать XLSX файл, используя PHPExcel или другой Lib.