分类目录归档:开发应用

使用SDK在开发输出点读码PDF,点读笔索引档案dtt

将多个*.dtt档案合并成一个dtt档案

多个dtt合并成一个dtt档案意谓不需要使用书码切换dtt.
如果有多个dtt档案, 使用者必需使用书码或按键在多个dtt档案中切换. BindDtt.exe可以将多个dtt合并成一个dtt. 在合并dtt前使用者必需先规划码的使用.

  1. 如现在有5个dtt 档案他们使用的码段如下列表. 各个dtt档案的普通码及游戏码不能重复。
    clip_image002_thumb1
    ps. dtt的档名可以任意,在此为了方便才出名book1~book5

    普通码使用 游戏码使用
    Book1.dtt 10001-20000 4201-4899
    Book2.dtt 20001-30000 200000-200300
    Book3.dtt 30001-40000
    Book4.dtt 100000-101000
    Book5.dtt 101001-102000
  2. 将BindDtt.exe 复制到Ebook并执行它
    clip_image0025_thumb
  3. 执行完后如下,除了码号范围[10001-20000]最小的book1.dtt 的附档名还是dtt外,其他的都被改成itt. 这5本书共同使用book1.dtt的书码.
    并产生了broker.id档案, 笔开机第一次读取broker.id时会将broker.id改成book1.id, book1.id 记录了各个dtt档案的使用编码的范围, 如此现在不用书码就能任意点读这5本书的任何位置,
    firmware会读取book1.id判断某个码是在那个dtt并将其载入播放。
    比如点了码20002时, 笔会读取book1.id判断其在20001-30000这个范围内, 这个范围的码分配给了book2.itt, 所以笔就载入并播放book2.itt内20002这个码对应的语音.
  4. *.itt档案所对应的书本若不使用则相对应的*.itt档案可以不用放到笔内.
  5. clip_image0027_thumb
  6. 多本书需分配各自的编码范围且不重叠,并各自输出成book1.dtt,book2.dtt ……bookN.dtt档案以备使用。(每本书就是一个OidProducer专案)
    然后可以根据需要任意挑选其中几本书组合而不需要书码切换。
  7. 编辑时如何限制编码使用范围
    A. 限制普通码使用范围
    image
    B. 限制游戏码使用范围
    image
    C. 设定后使用重排可以将整本书的编码重排到这个范围
    clip_image002136
  8. OidProducer 8.31已内含BindDtt.exe
    image_thumb1
    image
  9. yDot 有10亿码量, 所以不用担心码不够用.

工具程序

OidProducer.exe 执行后在其项目目录会产生bin目录, 里面存放2个工具程序及其使用范例:

  1. bin\bind: 合并*.dtt档案
    BindDtt.exe: 使用DOS指令将多个*.dtt档案合并成一个*.dtt档案.
    example_run.bat: 是BindDtt.exe在DOS下使用的参数范例.
    BindDtt.exe 的说明请看”将多个*.dtt档案合并成一个dtt档案
  2. bin\dtt: 将资料转成*.dtt档案
    输出dtt档案不需要使用OidProducer.exe, 直接提供*.mp3跟*.txt给dtt.exe就能输出*.dtt及*.dic档案. 使用这工具可以将其他方案的笔的内容输出成*.dtt跟*.dic, 客户可以开发程序使用本工具取代OidProducer.exe的编辑功能.
    dtt.exe: 使用DOS指令输出*.dtt及*.dic.
    DttDll.dll: dtt.exe需要这个动态连接库才能执行.

OidProducer.exe 命令行参数

这一页是进阶内容, 如果你是刚使用OidProducer的使用者你可以完全不用理会本页内容.

  1. 一般情况下使用OidProducer.exe只要将其放到某个目录下然后执行它即可开始编辑. 此时它工作目录就是OidProducer.exe放置的目录.
    开启OidProducer开始编辑时如果有需要设置编码范围或其他一些进阶的设定则可以如下进入设定接口.
    image_thumb46
  2. OidProducer.exe v8.31之后也提供一些参数以供其他程序或Command line 下的调用. 其主要参数使用范例如下:
    image_thumb42
  3. –work-dir=”c:\oidProject” 设定工作目录为”c:\oidProject“, 不管OidProducer.exe 在不在工作目录内, 以此例开启的编辑工作目录即是—work-dir参数指定的目录”c:\oidProject“. 这表示OidProducer.exe不一定需要放置到工作目录内.
    image_thumb40
  4. –project-name=”MyFirstProj” 设定项目名称, 如同下面设定.
    image_thumb49
    在输出PDF时, 项目名称会被当作输出档名.
    image_thumb1
  5. –args-xml=”args.xml”一些OidProducer设置可以在OidProducer.exe启动前事先设定好并存成args.xml档案然后将其内容传入OidProducer.exe.
    image_thumb51
    image_thumb18
    a. 制作args.xml档案: 如下图, 工具栏打开”选项设置”然后按确定OidProducer.exe既会在工作目录下产生args.xml档案.
    image_thumb59

    b. 以下是args.xml档案跟”选项设置”内容的对应关系
    CustRange & StickerCustRange
    image_thumb30
    Game/CodeCustRange: 限制游戏码使用范围
    image_thumb53
    CustName
    image_thumb22
    Languages
    image_thumb24
    Index / DttOutputFileTitle
    image_thumb61
    IntermediateFolder & CopyToOutput
    image_thumb63
    RefFolder
    image_thumb65
  6. 下载 args_xml.zip档案 内含如下
    OidProducer_args.bat 示范如何用在Command line 叫用OidProducer并传入参数
    args.xml 以上范例的一个实例

OID 点读笔原理

  1. Optical IDentification点读笔利用红外光照射印刷品时只对其黑色含碳颜料有反应的特性制作出来的. 一般印刷品使用CMYK印刷的. 如果你用红外线照射他, 并挡掉所有可见光, 则你只能看到K层黑色的内容. 所以我们将一般的图书内容使用CMY印刷, 留下K用来印特殊经过编码排列的码点, 这样点读笔笔头照出的红外线再反射回笔头内的摄像头只能对K点有反应. 对其他的CMY就看不见. 如此我们就可以单纯的处理点读码而不必理会印给人看的部分.
    如下图我们将印有点读码的印刷品放大100倍后, 左边使用可见光照射, 右边使用红外线照射. 所看到的结果. 很明显右边的黑点既是点读码. 所以想把传统的印刷加入点读码不会增加印刷成本, 因为同样是4色印刷. 只是对原稿内容黑色的部分改成用CMY混出来的黑色(不含碳), 而真正的黑色K(含碳)留给点读码用.
    image_thumb6
  2. 以下四色印刷内容, 是由CMYK四版印出来的.
    image_thumb22
    我们来看看CMYK 这四版的内容. 最后一版K是给点读笔看的因为码点小人不容易看到, 前面三版CMY是给人看的点读笔看不到.
    image_thumb5

OID印刷方法

与点读笔配合使用的是印有OID码的印刷物,关于如何印刷,简单介绍如下:

(一)四版印刷
四版OID印刷,就是将三版的彩色印刷再加上一版OID底码印刷。将其原先四版印刷时的K版,分别并入C 、 M与Y版之中。由于供OID System读取的印刷品,除了印制底码的油墨必须含碳外,其余的油墨都不能含碳。因此四版OID印刷的油墨配置调整如下:
一. 印制C版所用油墨 → 正常印刷C油墨。
二. 印制M版所用油墨 → 正常印刷M油墨。
三. 印制Y版所用油墨 → 正常印刷Y油墨。
四. 印制OID底码所用油墨 → 用含碳的油墨印制。 (也可用正常印刷的K油墨,因为通常都会含碳成分)
五. 直接将OidProducer输出的PDF以CMYK分色就可以的到这四版.
image
a. 使用PhotoShop开启PDF档案
image
b.切换CMYK的Channels查看各版内容
image

 

(二)五版印刷
五版OID印刷,就是将四版彩色印刷再加上一版OID底码印刷。由于供OID System读取的印刷品,除了印制底码的油墨必须含碳外,其余的油墨都不能含碳。在一般使用的C, M, Y, K油墨中,只有黑色油墨K是含碳其余均不含碳。
因此将五版OID印刷的油墨配置调整如下:
一. 印制C版所用油墨 → 正常印刷C油墨。
二. 印制M版所用油墨 → 正常印刷M油墨。
三. 印制Y版所用油墨 → 正常印刷Y油墨。
四. 印制K版所用油墨 → 用C+M+Y混合后的油墨印制,也可采用不含碳的黑油墨
五. 印制OID底码所用油墨 → 用含碳的油墨印制

使用OidProducer输出第五版的Oid底码
image

使用开发SDK输出印刷档案

yDot DLL SDK 使用说明 使用yDotPdfDll库可以让客户自行编写程序输出码图及印刷用pdf档案。码点格式为yDot码(Sonix 码不开放),需使用习碟科技点读笔方能点读。

 

一、 SDK档案包括

1. yDotPdfDll.h

2. yDotPdfDll.dll

3. yDotPdfDll.lib

4. yDotPdfDllTest目录 ……VC6 C++ 范例程序

5. yDotPdfDllTest_Csharp目录 ……VS2008 C# 范例程序

6. 06.jpg 图for测试

 

二、 VC6 C++ 范例程序

1.使用Visual C++ 6.0 开启VC6目录下的yDotPdfDllTest.dsw

2. 编译前设定

clip_image002

3. 程序库设定 ..\yDotPdfDll.lib

clip_image004

4. 范例说明 Visual C++ 6.0 (yDotPdfDllTestDlg.cpp 内容)

//Step 1. 设定码点尺寸
 long dpi=600;//码点分辨率设为600dpi; 目前只能设600或1200
 long dotSzX=2,dotSzY=2;//码点大小 DotSize=2x2; 数值1至4
 YdOT::setPatternFormat(dpi,dotSzX,dotSzY,FALSE); 
 
 //Step 2. 设定进度条Callback 函数,请参看progressTest源码
 YdOT::setRunProgress(progressTest,(DWORD)&m_progress); 
 
 //产生20mm x 20mm 的底图
 double w=20.0;
 double h=20.0;
 DWORD hPdf=YdOT::pdfCreateW(w,h);
 
 long id=10001;
 int left=0;
 int top=0;
 int right= mm2px(w);
 int bottom= mm2px(h);

 //画方
 YdOT::ydDrawRect(hPdf,id,left,top,right,bottom,FALSE,FALSE);

 //画椭圆
 YdOT::ydDrawEllipse(hPdf,id,left,top,right,bottom,FALSE,FALSE);

 if(YdOT::writeToTif(hPdf,"t20x20.tif"))
      AfxMessageBox("Output t20x20.tif finished!");
 else
      AfxMessageBox("Output t20x20.tif failed!");

 YdOT::pdfRelease(hPdf);

 return;

三、 VS2008 C# 范例程序

1. 编译前设定

clip_image006

2. 范例说明 C# (From1.cs 内容)

private void Ok_Click(object sender, EventArgs e)
{
if(false)
{
int mainVer = 0;
int subVer = 0;
bool b = dllVersion(ref mainVer, ref subVer);
}
if(true)
{
bool ret;
//Step 1. 设定码点尺寸
int dpi=600;//码点分辨率设为600dpi; 目前只能设600或1200
int dotSzX=2,dotSzY=2;//码点大小 DotSize=2×2; 数值1至4
ret = setPatternFormat(dpi, dotSzX, dotSzY, true);

//Step 2. 设定进度条Callback 函数,请参看progressTest源码
setRunProgress(progressTest,1);

//Step 3. 读入底图example.jpg;背景图的解析读最好为300dpi
uint hPdf=pdfCreate(“example.jpg”);
//————————
{ //Step 4. 画码区块
int id=10001;
int left=219;
int top=128;
int right=819;
int bottom=189;
bool bFrame=true;
bool bNumber = true;

//画方
ret=ydDrawRect(hPdf, id, left, top, right, bottom, bFrame, bNumber);

//画椭圆
ret = ydDrawEllipse(hPdf, id, 123, 289, 187, 357, bFrame, bNumber);

//画多边形
int[] poly=new int[12] {208,469, 850,469, 850,532, 573,532, 573,598, 208,598};
ret = ydDrawPoly(hPdf, id, poly, 6, bFrame, bNumber);
}
//————————
//Step 5. 输出码图
ret = writeToTif(hPdf, “output.tif”);
MessageBox.Show(“Output output.tif finished!”);

//Step 5. 输出PDF=码图+底图
ret = writeToPdf(hPdf, “output.pdf”);
MessageBox.Show(“Output output.pdf finished!”);

//Step 6.释放记忆体
ret = pdfRelease(hPdf);
}
}

dtt.exe 各参数说明

dtt.exe 各参数说明, 有些参数只在特殊的功能才会使用到。

work-dir 执行dtt.exe的工作目录
id-from 功能指示,指示id跟mp3的关联跟搜寻方式,目前只有4个值 IdFromFile、IdFromField、IdFromRow、Id4Timeline。

功能名称 说明
IdFromFile 使用mp3档名来关联id, 如点读id=10001码播 10001.mp3。
IdFromField 读取 *.csv ”索引档案“ 找到 id 跟 mp3 的关联。
IdFromRow 读取 *.txt ”索引档案“ 找到 id 跟 mp3 的关联,其中id是*.txt内的第几行加上起始 “begin-id”值,即id=begin-id+行
Id4Timeline 读取 yDot-Timeline.xml ”索引档案“ 找到 id 跟 mp3 的关联, 其中yDot-Timeline.xml是由OidProducer 输出dtt时产生的。
book-id 指定改dtt的书码,范围 1-4000
vender-id 专用码客户使用,使用该vender-id加密限制专用笔才能读取该输出的dtt,普通客户使用 0。
audio-folder 存放mp3的文件夹,dtt.exe需要mp3时会搜寻这个文件夹及其子文件夹直到找到mp3,搜寻顺序根据文件夹的排序搜寻,同名mp3先搜寻到的先用。路径需要用相对路径,相对work-dir。
audio-folder2 audio-folder
output-title 输出dtt的档名。 比如 output-title=abc 时会输出 abc.dtt
output-folder 输出dtt的文件夹 比如 output-folder=”c:\out” 时 xxx.dtt 会输出到 “c:\out\xxx.dtt”, 路径需要用相对路径,相对work-dir。
limit-size 限制dtt输出大小,可以使用M、G,比如 limit-size=128M 或limit-size=1G,最大不能超过1G。当mp3查过limit-size时会被切割成 xxx.dtt、xxx.001、xxx.002…..xxx.999。其中每个档案不超过limit-size。
test 当id及mp3很多时要输出dtt将会花很多时间,比如输出1G的dtt可能要2个小时,但有时只想输出dtt测试看看设定对不对,此时设定test=1 只输出前面100笔索引。记得正式输出时要改回test=0
lang-folders IdFromFile时 指定lang0、lang1、lang2…..lang9 对应的mp3存放文件夹。
index-file IdFromFieldIdFromRowId4Timeline 时使用。 指定索引档案。索引档案存放id跟mp3的对应关系
begin-id IdFromRow 时使用。表示*.txt的第一行对应的id 时 begin-id。比如begin-id=20001, 表示*.txt的第一行的MP3关联的码是20001
is-dict 字典制作;输出 *.dic 还是 *.dtt; 当is-dict=1时表示输出字典档案*.dic。预设不写时is-dict=0 输出dtt。
letter-file 字典制作;字母档案。