Ошибка печати при экспорте в Pdf

Автор Тема: Ошибка печати при экспорте в Pdf  (Прочитано 45207 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #30 : 21-04-2016, 05:15:30 »
Самое смешное, что при печати при помощи DSD в PDF/DWF(DWFx) не нужно вообще указывать устройство вывода.

Да, и это прекрасно :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #31 : 21-04-2016, 05:57:14 »
при печати при помощи DSD в PDF/DWF(DWFx) не нужно вообще указывать устройство вывода
...а разве листы, которые я указываю в DSD-файле, не должны быть заранее настроены на нужное устройство вывода и правильный формат листа?

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #32 : 21-04-2016, 06:42:22 »
а разве листы, которые я указываю в DSD-файле, не должны быть заранее настроены на нужное устройство вывода и правильный формат листа?

Должны :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #33 : 21-04-2016, 06:49:11 »
Евгений, большое спасибо за подсказку про LocaleMediaName!!! С помощью Вашего примера узнала, как на самом деле называется мой лист, передала ему LocaleMediaName верный, и ошибка исчезла! теперь все листы настроены, можно приступать к созданию DSD-файла ))))

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #34 : 21-04-2016, 06:54:50 »
Евгений, большое спасибо за подсказку про LocaleMediaName!!! С помощью Вашего примера узнала, как на самом деле называется мой лист, передала ему LocaleMediaName верный, и ошибка исчезла! теперь все листы настроены, можно приступать к созданию DSD-файла ))))

Жду от Вас сообщения, что всё работает отлично!!! Удачи и фунт терпения :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #35 : 21-04-2016, 07:03:15 »
спасибо!!!  :)

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #36 : 21-04-2016, 07:10:24 »
Не в праве Вам указывать, просто порекомендую попробовать три варианта dsd-файлов:

1. Один чертеж -> Каждый лист по отдельности в PDF.
2. Один чертеж -> Один PDF (все листы в одном файле).
3. Много чертежей -> Один PDF (все листы каждого чертежа в одном файле).

Будут вопросы - обращайтесь!

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #37 : 21-04-2016, 07:15:55 »
да, попробую все, но мне заказали один файл DWG - один PDF (у меня в каждом dwg-файле по одному листу всегда).
а вопросы точно появятся )))

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #38 : 21-04-2016, 10:28:17 »
Получился вариант, когда много файлов - один PDF (т.к. если несколько DSD-файлов я пытаюсь в цикле опубликовать, AutoCAD только 1 публикует (последний почему-то), остальные - нет, говорит, что были ошибки публикации, я так понимаю, что просто пока он первый печатает - уже циклом следующий обрабатывается (он у меня спрашивает имя DSD-файла), и он не успевает его обработать). Никак не получится осуществить вариант один чертеж - один PDF?

...и еще такой вопрос появился: у меня имена dwg-файлов содержат кириллицу, и когда я их передаю в файл DSD - кириллические символы там неверно отображаются, имя файла, соответственно, уже неверное, и AutoCAD не может этот файл найти... здесь тоже кроме как переимнованием файла не обойтись?

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #39 : 21-04-2016, 10:46:49 »
Никак не получится осуществить вариант один чертеж - один PDF?

Получится!!! Но есть одна загвоздка. Один файл чертежа = Один dsd-файл :) А вот в одном dsd-файле для каждого чертежа настроить свой pdf-файл???? Я посмотрю и отвечу!!!


у меня имена dwg-файлов содержат кириллицу, и когда я их передаю в файл DSD - кириллические символы там неверно отображаются, имя файла, соответственно, уже неверное, и AutoCAD не может этот файл найти... здесь тоже кроме как переименованием файла не обойтись?

Не надо никого переименовывать. Давайте лучше спросим себя, а в каком формате сохраняется dsd-файл?! Не помню точно, но если файл сохраняется в UTF-8, то проблем быть не должно. Если Ваш dsd-файл сохраняется в ANSI или Unicode, тогда русские буквы в названии чертежа действительно неверно отображаются!!! Это решается просто сохранением файла в UTF-кодировке.

Поправьте меня, если я не прав.

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #40 : 21-04-2016, 10:57:20 »
у меня так и есть: один файл чертежа - один dsd-файл, но когда я выполняю команду Publish в AutoCAD в цикле для каждого dsd-файла, то публикуется только последний файл, а другие 3 - с ошибкой (они начинают публиковаться, когда еще 1-й не распечатался).

...кодировку файла задала UTF8, в нем все красиво отображается, но когда AutoCAD ее считывает командой PUBLISH - заменяет кириллицу чем попало ((
« Последнее редактирование: 21-04-2016, 11:27:40 от Надежда »

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #41 : 21-04-2016, 11:30:09 »
у меня так и есть: один файл чертежа - один dsd-файл, но когда я выполняю команду Publish в AutoCAD в цикле для каждого dsd-файла, то публикуется только последний файл, а другие 3 - с ошибкой (они начинают публиковаться, когда еще 1-й не распечатался).

Это понятно :)

Еще вопрос: в одном файле только один лист? Если да, то я Вам помогу!!! Если нет, то поработайте с проверкой состояния приложения AutoCAD, если он занят, то ждать пока он освободится.

...а про кодировку файла - как ее можно программно задать? я ведь файл dsd создаю программно


Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Diagnostics;
  11.  
  12. namespace C_Sharp_Tuturials
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.  
  21.         private void button1_Click(object sender, EventArgs e)
  22.         {
  23.             string MyContent = "";
  24.  
  25.             MyContent += "Привет, проверка сохранения" + (char) 13;
  26.             MyContent += "Если русские буквы будут отображаться неверно, то я что-то напутал" + (char) 13;
  27.             MyContent += "Если всё окей. то задача решена!!!" + (char)13;
  28.  
  29.             System.IO.File.WriteAllText("D:\\1.dsd", MyContent, System.Text.Encoding.ASCII); //Получаются ????? ??? ??? или типа того...
  30.             System.IO.File.WriteAllText("D:\\2.dsd", MyContent, System.Text.Encoding.UTF8); //Получается всё хорошо!!! Можно попробовать ещё UNICODE!!!
  31.  
  32.             Process.Start("C:\\Program Files (x86)\\Notepad++\\notepad++.exe", "D:\\1.dsd");
  33.             Process.Start("C:\\Program Files (x86)\\Notepad++\\notepad++.exe", "D:\\2.dsd");
  34.            
  35.         }
  36.     }
  37. }

В общем, тут нужно подобрать кодировку :) Может в ANSI или UNICODE будет хорошо, а в UTF-8 плохо! Точно не помню. Главное как сам AutoCAD отреагирует :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #42 : 21-04-2016, 11:45:57 »
в одном файле только один лист?
в dwg-файле 2 листа (один, который был по умолчанию при создании файла и второй - мой, с которым я работаю), в dsd-файл я пишу имя только моего листа...
...а кодировка в dsd-файле = UTF8 (она по умолчанию там была такая, и руками специально я ее тоже выставляла) - в блокноте все отлично и красиво, но когда AutoCAD считывает - то перевирает кириллицу.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #43 : 21-04-2016, 11:48:00 »
у меня так и есть: один файл чертежа - один dsd-файл, но когда я выполняю команду Publish в AutoCAD в цикле для каждого dsd-файла, то публикуется только последний файл, а другие 3 - с ошибкой (они начинают публиковаться, когда еще 1-й не распечатался).
Какую команду PUBLISH??? Начинаем все с начала: http://adn-cis.org/forum/index.php?topic=7028.msg19746#msg19746
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #44 : 22-04-2016, 08:53:43 »
...добрый день всем!  :)
...начала заново по варианту 1 :)

настроила параметры печати для листа, но распечатать не могу, AutoCAD выдает ошибку при проверке параметров печати (строка 1 кода), выдает сообщение "Autodesk.AutoCAD.Runtime.Exception: eWasOpenForWrite    в Autodesk.AutoCAD.PlottingServices.PlotInfoValidator.Validate(PlotInfo info)" .
Если же я закомментирую эту строку с проверкой, тогда все ломается на следующей строке (2) с такой ошибкой: "Autodesk.AutoCAD.Runtime.Exception: eInvalidPlotInfo    в Autodesk.AutoCAD.PlottingServices.PlotEngine.BeginDocument(PlotInfo plotInfo, String documentName, Object parameters, Int32 copies, Boolean plotToFile, String fileName)"
вот код:
Код - C# [Выбрать]
  1.                                 // Get the PlotInfo from the layout
  2.                                 PlotInfo acPlInfo = new PlotInfo();
  3.                                 acPlInfo.Layout = newLayout.ObjectId;
  4.  
  5.                                 // Get a copy of the PlotSettings from the layout
  6.                                 PlotSettings acPlSet = new PlotSettings(newLayout.ModelType);
  7.                                 acPlSet.CopyFrom(newLayout);
  8.  
  9.                                 // Update the PlotConfigurationName property of the PlotSettings object
  10.                                 PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;
  11.  
  12.                                 acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Layout);
  13.                                 acPlSetVdr.SetUseStandardScale(acPlSet, true);
  14.                                 acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.StdScale1To1);
  15.                                 acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF.pc3",
  16.                                                                     "UserDefinedMetric (594.00 x 841.00мм)_1");
  17.  
  18.                                 // Update the layout
  19.                                 newLayout.CopyFrom(acPlSet);
  20.                                 acPlInfo.OverrideSettings = acPlSet;
  21.  
  22. //ТЕПЕРЬ ПЫТАЮСЬ ЭТОТ ЛИСТ СРАЗУ РАСПЕЧАТАТЬ
  23.  
  24.                 String OutPath = dxf.FullName.Replace(dxf.Extension, ".pdf");
  25.                 Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 0);
  26.                 if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
  27.                 {
  28.                     PlotEngine pe = PlotFactory.CreatePublishEngine();
  29.                     using (pe)
  30.                     {
  31.                         PlotProgressDialog ppd = new PlotProgressDialog(false, 1, true);
  32.                         using (ppd)
  33.                         {
  34.                              // Setting up the PlotProgress dialog
  35.                             ppd.set_PlotMsgString(PlotMessageIndex.DialogTitle, "Custom Plot Progress");
  36.                             ppd.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage, "Cancel Job");
  37.                             ppd.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage, "Cancel Sheet");
  38.                             ppd.set_PlotMsgString(PlotMessageIndex.SheetSetProgressCaption, "Sheet Set Progress");
  39.                             ppd.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption, "Sheet Progress");
  40.                             ppd.LowerPlotProgressRange = 0;
  41.                             ppd.UpperPlotProgressRange = 100;
  42.                             ppd.PlotProgressPos = 0;
  43.                             ppd.OnBeginPlot();
  44.                             ppd.IsVisible = true;
  45.  
  46.                             pe.BeginPlot(ppd, null);
  47.  
  48.                              // Starting new page
  49.                                 ppd.StatusMsgString = "Plotting layout";
  50.                                 ppd.OnBeginSheet();
  51.                                 ppd.LowerSheetProgressRange = 0;
  52.                                 ppd.UpperSheetProgressRange = 100;
  53.                                 ppd.SheetProgressPos = 0;
  54.  
  55.                                 PlotInfoValidator piv = new PlotInfoValidator();
  56.                                 piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
  57.                                 PlotPageInfo ppi = new PlotPageInfo();
  58.                            
  59.  (1)                           piv.Validate(acPlInfo);
  60.  
  61.  (2)                           pe.BeginDocument(acPlInfo, dxf.Name, null, 1, true, OutPath); // Create document for the first page
  62.  
  63.                             // Finish the document and finish the plot
  64.                             pe.EndDocument(null);
  65.                             ppd.PlotProgressPos = 100;
  66.                             ppd.OnEndPlot();
  67.                             pe.EndPlot(null);
  68.                         }
  69.                     }
  70.                 }