В каком формате находится этот файл (начиная с "! R! SEM 9; EXIT;") и как отобразить его на экране

1286
user450387

У меня есть следующий файл, найденный в клиентской системе, и мне нужно выяснить, в каком он формате и (если возможно), как открыть его в Windows (Win7 или более поздняя версия будет в порядке).

Это может быть какой-то формат графики / принтера. Имя файла не содержит расширений, и оно было сгенерировано с использованием Windows 95.

Заголовок файла:

!R! SEM 9;EXIT; %-12345X@PJL JOB @PJL SET ECONOMODE=OFF  @PJL RDYMSG DISPLAY="" @PJL ENTER LANGUAGE=POSTSCRIPT M%!PS-Adobe-3.0 %%Title:  %%Creator: Kyocera Mita FS-1020D KX %%CreationDate: 10/24/2016 08:45 %%DocumentPrinterRequired: Kyocera Mita FS-1020D KX %%For:  %%BoundingBox: (atend) %%Pages: (atend) %%Orientation: (atend) %%PageOrder: Special %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%EndComments %%BeginDefaults %%PageOrientation: Portrait %%PageBoundingBox: 12 10 407 587 %%PageMedia: (Plain) %%EndDefaults %%BeginProlog %%BeginResource: Macro_Basic /KPDLBASE 100 dict dup begin 

Он содержит больше «%%» - разделов, здесь без содержимого, так как это могут быть конфиденциальные данные:

%% Graphics ... %% Font ... %% Reencode ... %% T42 ... end def %%EndResource %%EndProlog %%BeginSetup KPDLBASE begin %%BeginFeature: *Resolution 600dpi BF{ <</HWResolution [600 600]>> SP <</PreRenderingEnhance t>> SP }EF %%EndFeature %%BeginFeature: *InputSlot (Auto Tray Select) BF{ <</DeferredMediaSelection t>> SP }EF %%EndFeature %%BeginFeature: *PageSize (A5) BF{ <</Policies <</PageSize 7>> /PageSize [422 595] /ImagingBBox n>> SP }EF %%EndFeature %%BeginFeature: *MediaType (Automatische Medienauswahl) BF{ }EF %%EndFeature %%BeginFeature: Copies 1 BF{ <</NumCopies 1>> SP }EF %%EndFeature %%BeginFeature: *Duplex None BF{ & ` f setduplexmode E }EF %%EndFeature %%BeginFeature: *Smoothing ON BF{ 1 & /setdoret g e }EF %%EndFeature %%BeginFeature: *Collate true BF{ userdict /UICollateDetails known not if userdict /UICollateDetails g @ /Mode 0 put /Hold 0 put <</Collate t /CollateDetails UICollateDetails>> SP }EF %%EndFeature /DTM [0.12000 0.0 0.0 -0.12000 10 587] d %%EndSetup KPDLBASE /PageSV save put %%Page: 1 1 %%PageOrientation: Landscape %%PageBoundingBox: (atend) %%BeginPageSetup [0.0 0.12000 0.12000 0.0 12 10] + G %%EndPageSetup 

Затем следует ~ 2500 строк содержимого и следующий нижний колонтитул:

%%PageTrailer %%PageBoundingBox: 0 0 574 396 /PageSV where { pop PageSV restore } if %%Trailer %%Pages: 1 %%Orientation: Portrait Landscape %%BoundingBox: 0 0 574 396 %%EOF %-12345X@PJL EOJ %-12345X 

РЕДАКТИРОВАТЬ:

Вот код для C # -консольного приложения, которое пытается преобразовать все файлы в данном каталоге в файлы PDF. Пожалуйста, обратите внимание, что я не делал никаких проверок на данные входных данных.

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace PrintDataToPDF { class Program { static void Main(string[] args) { Console.WriteLine("Input filepath:"); string inputDir = Console.ReadLine();  DirectoryInfo dir = new DirectoryInfo(inputDir);  Console.WriteLine("Output filepath:");  string outputDir = Console.ReadLine();  List<FileInfo> fileList = new List<FileInfo>();  foreach (FileInfo item in dir.GetFiles()) { fileList.Add(item); }  Console.WriteLine(fileList.Count + " files found! Convertation is starting..");  foreach (FileInfo item in fileList) { string tempname = Path.GetTempFileName(); using (StreamReader reader = new StreamReader(item.FullName)) { string content = reader.ReadToEnd(); using (StreamWriter writer = new StreamWriter(tempname)) { writer.Write(content.Substring(content.IndexOf("%%"))); } Process.Start(@"C:\Program Files\gs\gs9.21\bin\gswin64c.exe", "-o " + outputDir + item.Name + "out.pdf -sDEVICE=pdfwrite "+ tempname); Console.WriteLine(item.Name + " was converted!"); } }  Console.WriteLine("DONE"); Console.ReadLine(); } } } 
1

1 ответ на вопрос

2
Rik

!R!SEM6;EXIT; это команда, используемая принтерами и копирами kyocera (которая, вероятно, была драйвером принтера, использованным для создания этого файла).

  • !R! обозначает код распознавания для команд предписания.
  • SEMрасшифровывается как Set Emulation Mode. эта команда временно меняет режим эмуляции.
  • 6Эмуляция средства HPIII
  • EXIT заканчивает казнь

Следующие строки со @PJLзнаком указывают на «заголовок языка задания на печать».

M%!PS-Adobe-3.0Показывают, что все остальное Postscript код.

Вы можете распечатать этот файл RAW на принтере, но если вы хотите просмотреть его на экране, вы можете взять весь код Postscript и преобразовать его в видимое изображение.

Например, вы можете использовать Ghostscript для создания PDF. Сохраните весь код Postscript (так что все, начиная с %% Title и далее) в файл и выполните gs.exe.

gs.exe -o out.pdf -sDEVICE=pdfwrite input-file 

Изменить: Если у вас есть 1500+ файлов, вы можете использовать пакетный файл для их преобразования. Предполагая, что все они находятся в одном каталоге, вы можете сделать что-то вроде этого:

Создайте
файл convert.cmd где-нибудь: предполагается, что ваши файлы находятся в C: \ YOUR_RAW_FILES.
Предполагается, что все они находятся в одном каталоге.
Предполагается, что gs установлен в C: \ Program Files (x86) \ gs \ gs9.05 \ bin \ (измените, если другая версия )

@echo off  :: create a convert directory and remove contents if not exist "C:\MYCONVERTS\" mkdir C:\MYCONVERTS del /Q C:\MYCONVERTS\*.*  :: loop through all your files and pass the linenumber for %%Title to convert-procedure for %%X IN (C:\YOUR_RAW_FILES\*.*) do ( for /f "delims=:" %%a in ('findstr /n "%%Title" %%X') do call :convert %%a %%X %%~nX )  :: remove the temp files leaving the pdf files in MYCONVERTS del /Q C:\MYCONVERTS\*.tmp  goto End ::--------------------------------  ::================================ :convert :: we need the lines above %%Title (so - 1) set /a z=%1 - 1 :: export all remaining lines to .tmp (skipping the first x lines) for /f "tokens=* skip=%z%" %%b IN ('type %2') DO @echo %%b >> C:\MYCONVERTS\%3.tmp  :: execute ghostscript with correct parameters "C:\Program Files (x86)\gs\gs9.05\bin\gswin32c.exe" -o C:\MYCONVERTS\%3.pdf -sDEVICE=pdfwrite C:\MYCONVERTS\%3.tmp  goto :eof ::================================  :End 

Я не уверен, если это будет продолжаться, если файлы содержат реальную двоичную информацию, но вы можете попробовать.

Работал отлично, без «gs» перед параметрами. Любая идея сделать все это на 1500+ файлов, без необходимости открывать и сохранять их все вручную? user450387 7 лет назад 0
@ user450387 Хорошо, в этом случае вы ввели его в самой интерактивной программе Ghostscript. Gs (или gs.exe) понадобится, если вы запустите его из командной строки или из пакетного файла. В вашем случае вам понадобится удалить переднюю часть файла и передать остальные файлы gs.exe в пакетный файл. Вы знакомы с пакетными файлами? Rik 7 лет назад 0
@ user450387 Я также добавил пакетный файл для преобразования нескольких файлов (он содержит комментарий, чтобы вы могли понять, что сделано). Rik 7 лет назад 0
О, конечно, спасибо. Я немного застрял на пути .. Пакет не работает, следовательно, есть некоторые ошибки на эхо. Но я не хочу мешать вам выполнять мою работу, поэтому я решил написать небольшое консольное приложение C #, которое обрабатывает все эти вещи. (И поскольку я недостаточно знаю о пакетном программировании, мне будет легче понять и отладить) Я обновлю свой вопрос кодом, который я сделал. user450387 7 лет назад 0
У вас есть идея, как я могу настроить «Виртуальный» принтер для создания таких файлов postscript-Printer для меня? Я пытался сделать это с драйвером, который был там предоставлен "Kyocera Mita FS-1020D KX" и несколькими другими, но я всегда получаю форматированный файл "PCLXL". user450387 7 лет назад 0
@ user450387 В каталоге Gostscript \ gs \ gs9.05 \ lib есть два файла ghostpdf.inf и ghostpdf.ppd, которые можно использовать как «чистые» драйверы PostScript для принтера. Нет PCLXL вообще. Полученный файл может быть идеально использован с самим ghostscript. Rik 7 лет назад 0
@ user450387 А если вы хотите автоматизировать создание PDF-файлов с помощью программы, вы можете использовать драйвер порта Redmon. В этом случае вы выбираете не файл или USB в качестве порта принтера, а порт Redmon. В Redmon вы можете настроить его запуск вашей программы при получении файла postscript. Вот как это делают принтеры pdf-creator. http://pages.cs.wisc.edu/~ghost/redmon/index.htm Rik 7 лет назад 0