В каком формате находится этот файл (начиная с "!R! SEM 9;EXIT;") и как отобразить его на экране
У меня есть следующий файл, найденный в клиентской системе, и мне нужно выяснить, в каком формате он находится и (если возможно), как открыть его в 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 {userdict /UICollateDetails 10 # put} 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 ответ
!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
Я не уверен, если это будет продолжаться, если файлы содержат реальную двоичную информацию, но вы можете попробовать.