我有一个android应用程序,它从具有各种视图的界面获取用户输入。我使用这些输入作为字符串,并根据我准备的模板,借助canvas object的draw方法将它们打印到pdf上。这些工作很好,但我遇到了一些问题。字符串中的一些字母要么在其他字母之间有太多的空间,要么空间非常小,从而导致字母之间的冲突。它使pdf文件的视觉效果很差。我使用了paint object的“setletterspacing”方法来设置字母之间的间距长度,但它不起作用。我怎样才能使所有的字母有相同的间距,而整个文本看起来不错?
private void makePDF(){
PdfDocument document=new PdfDocument();
Paint paint=new Paint();
PdfDocument.PageInfo myPageInfo=new PdfDocument.PageInfo.Builder(250,400,1).create();
PdfDocument.Page myPage=document.startPage(myPageInfo);
Canvas canvas=myPage.getCanvas();
Rect textBounds = new Rect();
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(10);
paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
canvas.drawText("İSG RİSK TESPİT VE DÖF FORMU",myPageInfo.getPageWidth()/2,8,paint);
paint.setTypeface(Typeface.create("Arial", Typeface.NORMAL));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
canvas.drawRect(1,20,(myPageInfo.getPageWidth())-1,(myPageInfo.getPageHeight()/2)-50,paint);
canvas.drawLine(myPageInfo.getPageWidth()/5,20,myPageInfo.getPageWidth()/5,44,paint);
canvas.drawLine(7*myPageInfo.getPageWidth()/10,20,7*myPageInfo.getPageWidth()/10,44,paint);
paint.setStrokeWidth(0);
paint.setStyle(Paint.Style.FILL);
String[] blockKısım={"Tespit Tarihi","Uygunsuz lukYeri","Etkilenen Kişi/Grup","Alınmış Önlem"};
String[] blockCevap={btnCallendar.getText().toString(),edUygunsuz.getText().toString(),edEtkilenen.getText().toString(),edAlinmisOnlem.getText().toString()};
paint.setTextAlign(Paint.Align.LEFT);
paint.setTextSize(3f);
//paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL));
int startX=2;
int startY=22;
int endX=7*myPageInfo.getPageWidth()/10;
for (int i=0;i<4;i++){
// paint.setColor(ResourcesCompat.getColor(getResources(), R.color.gray, null));
canvas.drawText(blockKısım[i],startX,startY+3,paint);
//paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL));
canvas.drawText(blockCevap[i],(myPageInfo.getPageWidth()/5)+2,startY+3,paint);
//paint.setColor(ResourcesCompat.getColor(getResources(), R.color.black, null));
canvas.drawLine(startX,startY+4,endX,startY+4,paint);
startY+=5;
}
canvas.drawText("Risk Derecesi",(myPageInfo.getPageWidth()-(2*myPageInfo.getPageWidth()/10)),25,paint);
canvas.drawLine(7*myPageInfo.getPageWidth()/10,26,myPageInfo.getPageWidth()-1,26,paint);
String[] strRısk={"Olasılık","Frekans","Şiddet","Risk"};
String[] strRıskUserr={spOlasilik.getSelectedItem().toString(),spFrekans.getSelectedItem().toString(),spSiddet.getSelectedItem().toString(),
(Double.parseDouble(spFrekans.getSelectedItem().toString())*Double.parseDouble(spOlasilik.getSelectedItem().toString())
*Double.parseDouble(spSiddet.getSelectedItem().toString()))+""};
int startLeft=(7*myPageInfo.getPageWidth()/10)+2;
for (int i=0;i<4;i++){
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(0);
canvas.drawRect(startLeft,28,startLeft+15,43,paint);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(0);
paint.setTextSize(2f);
canvas.drawText(strRısk[i],startLeft ,31,paint);
paint.setTextSize(5);
canvas.drawText(strRıskUserr[i],startLeft+5 ,38,paint);
paint.setTextSize(3f);
canvas.drawLine(startLeft,32,startLeft+15,32,paint);
startLeft+=18;
}
canvas.drawText("X",(7*myPageInfo.getPageWidth()/10)+18 ,38,paint);
canvas.drawText("X",(7*myPageInfo.getPageWidth()/10)+36 ,38,paint);
canvas.drawText("=",(7*myPageInfo.getPageWidth()/10)+54 ,38,paint);
//paint.settext
canvas.drawLine(1,44,myPageInfo.getPageWidth()-1,44,paint);
canvas.drawText("Tehlike Açıklaması",(myPageInfo.getPageWidth()/6)+5 ,49,paint);
TextPaint mTextPaint=new TextPaint();
mTextPaint.setTextSize(3);
mTextPaint.setLetterSpacing(0.15f);
StaticLayout mTextLayout = new StaticLayout(edAciklamaTehlike.getText().toString(),
mTextPaint, (canvas.getWidth()/2)-10, Layout.Alignment.ALIGN_NORMAL, 3f, 0.0f, false);
canvas.save();
startX = 2;
startY = 56;
canvas.translate(startX, startY);
mTextLayout.draw(canvas);
canvas.restore();
canvas.drawText("Fotoğraf",(4*myPageInfo.getPageWidth()/6)+15 ,49,paint);
canvas.drawLine(1,52,myPageInfo.getPageWidth()-1,52,paint);
canvas.drawLine(3*myPageInfo.getPageWidth()/6 ,44,3*myPageInfo.getPageWidth()/6,(myPageInfo.getPageHeight()/2)-50,paint);
if (bitmap!=null){
Bitmap scaledbitmap3=getResizedBitmap(bitmap,100,100);
canvas.drawBitmap(scaledbitmap3,0,0,paint);
}
canvas.drawLine(1,(((myPageInfo.getPageHeight()/2)-44)/2)+19,myPageInfo.getPageWidth()/2,(((myPageInfo.getPageHeight()/2)-44)/2)+19,paint);
canvas.drawText("Risk Açıklaması",(myPageInfo.getPageWidth()/6)+5 ,(((myPageInfo.getPageHeight()/2)-44)/2)+24,paint);
mTextLayout = new StaticLayout(edAciklamaRisk.getText().toString(),
mTextPaint, (canvas.getWidth()/2)-10, Layout.Alignment.ALIGN_NORMAL, 3f, 0.0f, false);
canvas.save();
startX = 2;
startY = (((myPageInfo.getPageHeight()/2)-44)/2)+30;
canvas.translate(startX, startY);
mTextLayout.draw(canvas);
canvas.restore();
canvas.drawLine(1,(((myPageInfo.getPageHeight()/2)-44)/2)+27,myPageInfo.getPageWidth()/2,(((myPageInfo.getPageHeight()/2)-44)/2)+27,paint);
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(8);
paint.setLetterSpacing(0.1f);
paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
canvas.drawText("DÜZELTİCİ ÖNLEYİCİ FALİYET",myPageInfo.getPageWidth()/2,(myPageInfo.getPageHeight()/2)-34,paint);
paint.setTypeface(Typeface.create("Arial", Typeface.NORMAL));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
canvas.drawRect(1,(myPageInfo.getPageHeight()/2)-30,(myPageInfo.getPageWidth())-1,myPageInfo.getPageHeight()-30,paint);
paint.setStrokeWidth(0);
canvas.drawRect(5,(myPageInfo.getPageHeight()/2)-25,12,(myPageInfo.getPageHeight()/2)-18,paint);
canvas.drawRect((myPageInfo.getPageWidth()/2)+5,(myPageInfo.getPageHeight()/2)-25,(myPageInfo.getPageWidth()/2)+12,(myPageInfo.getPageHeight()/2)-18,paint);
paint.setStyle(Paint.Style.FILL);
paint.setTextSize(3f);
paint.setTextAlign(Paint.Align.LEFT);
//canvas.save();
//canvas.scale(1f, 1f);
canvas.drawText("Düzeltici Faaliyet/Meydana gelmiş bir uygunsuzluk için",13,(myPageInfo.getPageHeight()/2)-20,paint);
canvas.drawText("Önleyici Faaliyet/Meydana gelebilecek bir uygunsuzluk için",(myPageInfo.getPageWidth()/2)+13,(myPageInfo.getPageHeight()/2)-20,paint);
paint.setTextSize(4);
if (chDuzeltici.isChecked())
canvas.drawText("X",6,(myPageInfo.getPageHeight()/2)-20,paint);
if (chOnleyici.isChecked())
canvas.drawText("X",(myPageInfo.getPageWidth()/2)+6,(myPageInfo.getPageHeight()/2)-20,paint);
canvas.drawLine(1,(myPageInfo.getPageHeight()/2)-17,myPageInfo.getPageWidth()-1,(myPageInfo.getPageHeight()/2)-17,paint);
canvas.drawLine(1,(myPageInfo.getPageHeight()/2)-8,myPageInfo.getPageWidth()-1,(myPageInfo.getPageHeight()/2)-8,paint);
canvas.drawText("Alınması Gereken Önlemler",(6*myPageInfo.getPageWidth()/20)+10,(myPageInfo.getPageHeight()/2)-10,paint);
mTextLayout = new StaticLayout(edAlinmasiGerekenOnlem.getText().toString(),
mTextPaint, (17*myPageInfo.getPageWidth()/20), Layout.Alignment.ALIGN_NORMAL, 3f, 0.0f, false);
canvas.save();
startX = 2;
startY =(myPageInfo.getPageHeight()/2)-7;
canvas.translate(startX, startY);
mTextLayout.draw(canvas);
canvas.restore();
canvas.drawLine((17*myPageInfo.getPageWidth()/20)+4,(myPageInfo.getPageHeight()/2)-8,(17*myPageInfo.getPageWidth()/20)+4,
(myPageInfo.getPageHeight()/2)-8+(myPageInfo.getPageHeight()/8),paint);
canvas.drawLine((17*myPageInfo.getPageWidth()/20)+10,(myPageInfo.getPageHeight()/2)-8,(17*myPageInfo.getPageWidth()/20)+10,
(myPageInfo.getPageHeight()/2)-8+(myPageInfo.getPageHeight()/8),paint);
canvas.drawLine(1,(myPageInfo.getPageHeight()/2)-8+(myPageInfo.getPageHeight()/8),myPageInfo.getPageWidth()-1,
(myPageInfo.getPageHeight()/2)-8+(myPageInfo.getPageHeight()/8),paint);
canvas.drawLine(1,(myPageInfo.getPageHeight()/2)+1+(myPageInfo.getPageHeight()/8),myPageInfo.getPageWidth()-1,
(myPageInfo.getPageHeight()/2)+1+(myPageInfo.getPageHeight()/8),paint);
canvas.drawText("Uygunsuzluğun Giderilmesi İçin Yapılan Çalışmalar",5*myPageInfo.getPageWidth()/20,(myPageInfo.getPageHeight()/2)-2+(myPageInfo.getPageHeight()/8),paint);
mTextLayout = new StaticLayout(edUygunsuzlugunGiderilmesi.getText().toString(),
mTextPaint, (17*myPageInfo.getPageWidth()/20), Layout.Alignment.ALIGN_NORMAL, 3f, 0.0f, false);
canvas.save();
startX = 2;
startY =(myPageInfo.getPageHeight()/2)+1+(myPageInfo.getPageHeight()/8)+1;
canvas.translate(startX, startY);
mTextLayout.draw(canvas);
canvas.restore();
canvas.drawLine((17*myPageInfo.getPageWidth()/20)+4,(myPageInfo.getPageHeight()/2)+1+(myPageInfo.getPageHeight()/8),(17*myPageInfo.getPageWidth()/20)+4,
(myPageInfo.getPageHeight()/2)+1+(2*myPageInfo.getPageHeight()/8),paint);
canvas.drawLine((17*myPageInfo.getPageWidth()/20)+10,(myPageInfo.getPageHeight()/2)+1+(myPageInfo.getPageHeight()/8),(17*myPageInfo.getPageWidth()/20)+10,
(myPageInfo.getPageHeight()/2)+1+(2*myPageInfo.getPageHeight()/8),paint);
canvas.drawLine(1,(myPageInfo.getPageHeight()/2)+1+(2*myPageInfo.getPageHeight()/8),myPageInfo.getPageWidth()-1,
(myPageInfo.getPageHeight()/2)+1+(2*myPageInfo.getPageHeight()/8),paint);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(0);
canvas.drawRect(5,(myPageInfo.getPageHeight()/2)+6+(2*myPageInfo.getPageHeight()/8),12,(myPageInfo.getPageHeight()/2)+13+(2*myPageInfo.getPageHeight()/8),paint);
canvas.drawRect((myPageInfo.getPageWidth()/2)+5,(myPageInfo.getPageHeight()/2)+6+(2*myPageInfo.getPageHeight()/8),(myPageInfo.getPageWidth()/2)+12,
(myPageInfo.getPageHeight()/2)+13+(2*myPageInfo.getPageHeight()/8),paint);
paint.setStyle(Paint.Style.FILL);
canvas.drawText("Uygunsuzluk Giderildi",13,(myPageInfo.getPageHeight()/2)+10+(2*myPageInfo.getPageHeight()/8),paint);
canvas.drawText("Uygunsuzluk Giderilmedi",(myPageInfo.getPageWidth()/2)+13,(myPageInfo.getPageHeight()/2)+10+(2*myPageInfo.getPageHeight()/8),paint);
paint.setTextSize(4);
if (chGiderildi.isChecked())
canvas.drawText("X",6,(myPageInfo.getPageHeight()/2)+10+(2*myPageInfo.getPageHeight()/8),paint);
else
canvas.drawText("X",(myPageInfo.getPageWidth()/2)+6,(myPageInfo.getPageHeight()/2)+10+(2*myPageInfo.getPageHeight()/8),paint);
paint.setTextSize(3f);
canvas.drawLine(1,(myPageInfo.getPageHeight()/2)+18+(2*myPageInfo.getPageHeight()/8),myPageInfo.getPageWidth()-1,
(myPageInfo.getPageHeight()/2)+18+(2*myPageInfo.getPageHeight()/8),paint);
canvas.drawText(" Çalışmayı Yapan İş Güvenliği Uzmanı " +
" Kontrol Eden Ve Onaylayan",13,
(myPageInfo.getPageHeight()/2)+25+(2*myPageInfo.getPageHeight()/8),paint);
canvas.drawLine(myPageInfo.getPageWidth()/3,(myPageInfo.getPageHeight()/2)+18+(2*myPageInfo.getPageHeight()/8),myPageInfo.getPageWidth()/3,
myPageInfo.getPageHeight()-30,paint);
canvas.drawLine(2*myPageInfo.getPageWidth()/3,(myPageInfo.getPageHeight()/2)+18+(2*myPageInfo.getPageHeight()/8),2*myPageInfo.getPageWidth()/3,
myPageInfo.getPageHeight()-30,paint);
canvas.drawLine(1,(myPageInfo.getPageHeight()/2)+30+(2*myPageInfo.getPageHeight()/8),myPageInfo.getPageWidth()-1,
(myPageInfo.getPageHeight()/2)+30+(2*myPageInfo.getPageHeight()/8),paint);
paint.setTextSize(2f);
canvas.drawText(" Ad, Soyad, imza Ad, Soyad, imza " +
" Ad, Soyad, imza",20,(myPageInfo.getPageHeight()/2)+35+(2*myPageInfo.getPageHeight()/8),paint);
paint.setTextSize(5f);
canvas.drawText("YS-ISG-017",1,myPageInfo.getPageHeight()-4,paint);
Calendar calendar=Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
String date = dateFormat.format(calendar.getTime());
canvas.drawText("YT-"+date,16*myPageInfo.getPageWidth()/20,myPageInfo.getPageHeight()-4,paint);
paint.setTextSize(3f);
canvas.save();
canvas.rotate(-90);
canvas.drawText("Termin Tarihi",-228,220,paint);
canvas.drawText("Tamamlama",-284,220,paint);
canvas.restore();
document.finishPage(myPage);
File file=new File (Environment.getExternalStorageDirectory(),"/Document.pdf");
try {
document.writeTo(new FileOutputStream(file));
}catch (IOException e) {
e.printStackTrace();
}
document.close();
Toast.makeText(getApplicationContext(),"PDF OLUŞTURULDU",Toast.LENGTH_LONG).show();
}
在此处输入图像描述
1条答案
按热度按时间pw136qt21#
打开要另存为pdf的文件,然后轻按平板电脑上的文件或轻按文件图标。在你的手机上。在“文件”菜单上,轻按“打印”。如果尚未选中,请在平板电脑上轻按microsoft print to pdf或在手机上轻按pdf。点击打印。在平板电脑上,将显示“输出另存为”页面。