我在客户系统上发现了以下文件,我需要弄清楚它是什么格式,以及(如果可能的话)如何在 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;
是京瓷打印机和复印机使用的命令(可能是用于生成此文件的打印机驱动程序)。
!R!
代表规定命令的识别码。SEM
代表设置仿真模式。此命令暂时改变仿真模式。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
如果文件包含真实的二进制信息,我不确定这是否会成立,但你可以尝试一下。