gifts2017

Конвертирование XLS в PDF

Опубликовал Василий Демидов (Душелов) в раздел Программирование - Практика программирования

Как сохранить свою печатную форму в PDF? Ответ здесь! ;)
Что необходимо:
1. Microsoft Office 2007
2. Надстройка 2007 Microsoft Office: сохранение в формате PDF или XPS (Майкрософт) (скачиваем http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=4d951911-3e7e-4ae6-b059-a2e79ed87041 )

Для начала сохраняем печатную форму в xls файл.
И далее:
Процедура СконвертироватьXLSвPDF(ФайлВходящий)

Попытка 

Excel = Новый COMОбъект("Excel.Application");
ExcelWorkBook = Excel.WorkBooks.Open(ФайлВходящий,,1); // открытие в режиме ReadOnly 

Excel.DisplayAlerts = 0; 
ExcelЛист =Excel.ActiveSheet;
Исключение 

Сообщить("Ошибка открытия файла: " + ФайлВходящий);
		

Возврат;
КонецПопытки;
Если ExcelWorkBook <> Null Тогда

ФайлИсходящий =СтрЗаменить(ФайлВходящий, ".xls", ".pdf");
ExcelWorkBook.ExportAsFixedFormat(0,ФайлИсходящий , 0);
	

КонецЕсли;
Excel.ActiveWorkbook.Close(0); // без записи изменений

Excel.Quit();
	

Excel = 0;
КонецПроцедуры 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. megatrend - (megatrend) 06.10.09 11:00
А через COM-объект бесплатной программы PDFCreator нельзя в файл напечатать? ;)
1. Василий Демидов (Душелов) 24.09.08 15:51
2. Трактор Трактор (Трактор) 06.10.09 11:08
(1) PDFCreator не всегда верно сохраняет. У меня не получилось уместить счёт на одну страницу. Бесплатное решение с помощью опена офиса описано тут http://infostart.ru/public/20710/ Работает лучше PDFCreator'а.
2. Сhe Burashka (CheBurator) 24.09.08 20:34
бяка! ;-)
- нужен офис... а если его у мну нет...?
- подойдет 2007, а если 2003? или не дай бог 2000? - где проверка на версию/возможность?
- и это похоже на гланды через ЗПС ;-)
- а где вариант для Оо...? в котором есть родное ПДФ...
3. ineoosaki (ineoosaki) 24.09.08 21:30
А что мешает печатать бесплатным пдф-принтером?
4. ineoosaki (ineoosaki) 24.09.08 21:41
немного не по теме, но всеже про пдф.
наткнулся я как-то у себя в архиве на Новейший отчет за 2005год. Решил пдф-хелп почитать. Смотрю, а он (хелп) триальной прогой сконвертирован, и на каждой странице об этом жирным текстом сказано. ИМХО, как-то несолидно к платной проге такой хелп прикладывать.
Ломанули бы прогу, и не писал бы я об этом здесь. :)
5. Василий Демидов (Душелов) 24.09.08 22:05
(2) то, что я дал- самый простой способ, т.к. офис обычно есть у многих... Без всего этого - только внешняя компонента, которая все это будет делать ;) Написать могу, а есть ли смысл?
(3) почитай ветку из 1 коммента ;)
(4) Ломать - плохо! Я уважаю труд других программистов :)
6. Сhe Burashka (CheBurator) 25.09.08 00:22
(5) > Написать могу, а есть ли смысл?
есть...
7. Сhe Burashka (CheBurator) 25.09.08 16:09
По ссылке http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=4d951911-3e7e-4ae6-b059-a2e79ed87041)
- запрашиваемая страница не найдена.. так и хочется -1 влепить... а еще спрашиваешь нужна ВК или нет....
8. Василий Демидов (Душелов) 25.09.08 16:36
(7) Пинай админов инфостарта, что так коряво отображают ссылки - удали скобку в конце.
9. Евгений Мартыненков (JohnyDeath) 25.09.08 16:36
скобку последнию убери!
млин, прям как маленький...
10. Аркадий Кучер (Abadonna) 25.09.08 16:47
(7)Чебуратор, ти мене убив
11. Евгений Мартыненков (JohnyDeath) 25.09.08 16:55
иногда, конечно, хорошо, что Чебур докапывается до мелочей, но это ИМХО уже перебор! Весь свой статус так растеряет ;)
12. Сhe Burashka (CheBurator) 26.09.08 13:57
Чебуру не влом растерять весь свой статус... я от эникейщика ухожу все дальше и дальше... матом в адрес админов инфостарта - ну вы поняли.. если там сидят эникейщики, которые толком не могут сделать - это не в моей власти... ;-)
13. Сhe Burashka (CheBurator) 26.09.08 13:58
так самое интересное что эту приблуду фиг скачаешь, если у тебя на компе офис не стоит... тоже мне, блин, автоматизаторы... (это я автору сабжа... ;-))
14. Василий Демидов (Душелов) 26.09.08 14:11
(13) так и написано, что для этого требуется ;) 1 пункт! :)
15. Аркадий Кучер (Abadonna) 26.09.08 14:13
(12-14) Как-то гаишник меня останавливает:
- почему скорость превышаешь?
- дык у тебя ж радара нет
- как будто я до чего-нибудь еще не докопаюсь ;)
16. ineoosaki (ineoosaki) 26.09.08 18:22
А вот как в дежавю конвертнуть, не подскажете?
17. Василий Демидов (Душелов) 26.09.08 21:09
(16) а для каких целей? мало информации по этому формату
18. ineoosaki (ineoosaki) 26.09.08 21:29
(17)
Мне дежавю больше чем пдф нравиться.
Хорошая компресия картинок (1мб ч/б картинка бмп уменьшается до 20кб), в просмотрщиках файл быстрее открывается, чем н-р пдф в акробате.
19. Евгений Мартыненков (JohnyDeath) 27.09.08 10:01
(18) pdf, ИМХО, лучше всего открывать FoxIt Reader-ом (бесплатный) https://www.foxitsoftware.com/pdf/reader_2/down_reader.htm
ineoosaki; Душелов; +2 Ответить
20. Moonlight81 (moonlight81) 01.10.08 09:33
Для таких целей я обычно ставлю бесплатный принтер PDFCreator и на него посылаю печать....вот и получается файлик pdf, а тут промежуточная фаза в виде XLS
21. Василий Демидов (Душелов) 01.10.08 09:36
22. Lara (gull71) 01.10.08 10:56
А можно узнать какой смысл конвертить *.xls в *.pdf, если при сохранении в *.xls теряется форматирование?Не проще напечатать на *.pdf-принтер сразу?Ну если не pdf, то Skitex можно поставить:-)И в дальнейшем отконвертить AcrobatDistiller-ом в pdf?
23. Василий Демидов (Душелов) 01.10.08 10:58
(22) 1. Смотря в формате какого офиса сохранять в xls.
2. Как я понял, все должно делаться программно.
24. Лавр (sea-man) 01.10.08 19:33
Василь, респект и уважуха!
Лавр.
25. Василий Демидов (Душелов) 01.10.08 19:38
26. Den (dance000) 03.10.08 09:41
Поддержу по поводу ненужности формата xls, т.к. у себя сделал что печатается прямо на принтер Adobe Distiller и полученный файлик забираю и складываю куда мне нужно.
29. Игорь (barsuk) 24.01.10 15:42
Выдает ошибку - Ошибка при вызове метода контекста (ExportAsFixedFormat): Произошла исключительная ситуация (0x800a03ec)
ExcelWorkBook.ExportAsFixedFormat(0, ФайлВФорматеXLS , 0);
по причине:
Произошла исключительная ситуация (0x800a03ec)
Не работает. Офис 2007.
30. dushelov (Душелов) 24.01.10 15:56
(29) Да, описание ошибки многозначащая... :)
А просто так, из офиса из меню сохраняет?
31. Игорь (barsuk) 24.01.10 16:14
(30) принтера не стояло - из-за этого:) но при попытки открытия пдф файла сохраненног выдает -файл не пдф или поврежден
32. dushelov (Душелов) 24.01.10 16:22
(31) Ну тут уже вопрос к микрософту :)
33. Игорь (barsuk) 24.01.10 16:27
Стоит Foxit Reader - он не открывает его. В чем проблема? Файл пересораненный таким образом будет открываться только акробатом? Или им тоже не будет?:)
34. Игорь (barsuk) 24.01.10 16:29
Но если попробовать открыть этот фал экселем - то все нормально:)
35. dushelov (Душелов) 24.01.10 16:30
(34) Я не знаю, как сохраняет офис. Я не разработчик этой надстройки.
У меня - все открывается. Всеми ридерами. Офис 2007 - лицензия со всеми обновлениями.
36. Игорь (barsuk) 24.01.10 16:34
(35) :) а нет идей почему такое может происходить? Такое ощущение что расширение поменял но в формат пдф не перевел:(
37. Ийон Тихий (cool.vlad4) 25.07.11 12:08
Пишу только из удивления и возможно, для тех кому надо сохранять mxl в pdf, используя описанный в статье способ(если excel стоит на сервере, то наверное можно сохранять и в контексте сервера). Вся проблема заключается в том, что при сохранении в xls, картинки теряют прозрачность. Если выставлять размер картинки - растянуть, затем делать фон либо прозрачным, либо rgb(255,255,255,0) , то сохраняется в excel(и кстати в open office тоже) с прозрачностью. Остается проблема размещения в одну страницу, которая легко решается либо макросом, либо лучше через com, например
xlPaperA4 = 9;
xlPrintNoComments = -4142;
xlAutomatic = -4105;
xlPortrait = 1;
xlDownThenOver = 1;
xlPrintErrorsDisplayed = 0;
ExcelЛист.PageSetup.LeftMargin = Excel.InchesToPoints(0);
ExcelЛист.PageSetup.RightMargin = Excel.InchesToPoints(0);
ExcelЛист.PageSetup.TopMargin = Excel.InchesToPoints(0);
ExcelЛист.PageSetup.BottomMargin = Excel.InchesToPoints(0);
ExcelЛист.PageSetup.HeaderMargin = Excel.InchesToPoints(0);
ExcelЛист.PageSetup.FooterMargin = Excel.InchesToPoints(0);
ExcelЛист.PageSetup.PrintHeadings = False;
ExcelЛист.PageSetup.PrintGridlines = False;
ExcelЛист.PageSetup.CenterHorizontally = False;
ExcelЛист.PageSetup.CenterVertically = False;
ExcelЛист.PageSetup.Orientation = xlPortrait;
ExcelЛист.PageSetup.PrintComments = xlPrintNoComments;
ExcelЛист.PageSetup.Draft = False;
ExcelЛист.PageSetup.PaperSize = xlPaperA4;
ExcelЛист.PageSetup.FirstPageNumber = xlAutomatic;
ExcelЛист.PageSetup.Order = xlDownThenOver;
ExcelЛист.PageSetup.BlackAndWhite = False;
ExcelЛист.PageSetup.Zoom = 100;
ExcelЛист.PageSetup.PrintErrors = xlPrintErrorsDisplayed;
ExcelЛист.PageSetup.OddAndEvenPagesHeaderFooter = False;
ExcelЛист.PageSetup.DifferentFirstPageHeaderFooter = False;
ExcelЛист.PageSetup.ScaleWithDocHeaderFooter = True;
ExcelЛист.PageSetup.AlignMarginsHeaderFooter = True;
NewLifeMan; kanimot; +2 Ответить
38. Vadim (Shmell) 20.12.11 08:04
Перенос по строкам в многострочном поле не корректно отображается. Само сохранение в xls уже делает все без переноса и соответственно в pdf все не очень красиво переносится