pdfcontentstreamprocessor.java
来自「源码包含生成 PDF 和 HTML 的类库」· Java 代码 · 共 532 行 · 第 1/2 页
JAVA
532 行
}
}
/**
* A content operator implementation (").
*/
private static class MoveNextLineAndShowTextWithSpacing implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfNumber aw = (PdfNumber)operands.get(0);
PdfNumber ac = (PdfNumber)operands.get(1);
PdfString string = (PdfString)operands.get(2);
ArrayList twOperands = new ArrayList(1);
twOperands.add(0, aw);
processor.invokeOperator(new PdfLiteral("Tw"), twOperands);
ArrayList tcOperands = new ArrayList(1);
tcOperands.add(0, ac);
processor.invokeOperator(new PdfLiteral("Tc"), tcOperands);
ArrayList tickOperands = new ArrayList(1);
tickOperands.add(0, string);
processor.invokeOperator(new PdfLiteral("'"), tickOperands);
}
}
/**
* A content operator implementation (').
*/
private static class MoveNextLineAndShowText implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
processor.invokeOperator(new PdfLiteral("T*"), new ArrayList(0));
processor.invokeOperator(new PdfLiteral("Tj"), operands);
}
}
/**
* A content operator implementation (Tj).
*/
private static class ShowText implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfString string = (PdfString)operands.get(0);
processor.displayPdfString(string, 0);
}
}
/**
* A content operator implementation (T*).
*/
private static class TextMoveNextLine implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
ArrayList tdoperands = new ArrayList(2);
tdoperands.add(0, new PdfNumber(0));
tdoperands.add(1, new PdfNumber(processor.gs().leading));
processor.invokeOperator(new PdfLiteral("Td"), tdoperands);
}
}
/**
* A content operator implementation (Tm).
*/
private static class TextSetTextMatrix implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
float a = ((PdfNumber)operands.get(0)).floatValue();
float b = ((PdfNumber)operands.get(1)).floatValue();
float c = ((PdfNumber)operands.get(2)).floatValue();
float d = ((PdfNumber)operands.get(3)).floatValue();
float e = ((PdfNumber)operands.get(4)).floatValue();
float f = ((PdfNumber)operands.get(5)).floatValue();
processor.textLineMatrix = new Matrix(a, b, c, d, e, f);
processor.textMatrix = processor.textLineMatrix;
}
}
/**
* A content operator implementation (TD).
*/
private static class TextMoveStartNextLineWithLeading implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
float ty = ((PdfNumber)operands.get(1)).floatValue();
ArrayList tlOperands = new ArrayList(1);
tlOperands.add(0, new PdfNumber(-ty));
processor.invokeOperator(new PdfLiteral("TL"), tlOperands);
processor.invokeOperator(new PdfLiteral("Td"), operands);
}
}
/**
* A content operator implementation (Td).
*/
private static class TextMoveStartNextLine implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
float tx = ((PdfNumber)operands.get(0)).floatValue();
float ty = ((PdfNumber)operands.get(1)).floatValue();
Matrix translationMatrix = new Matrix(tx, ty);
processor.textMatrix = translationMatrix.multiply(processor.textLineMatrix);
processor.textLineMatrix = processor.textMatrix;
}
}
/**
* A content operator implementation (Tf).
*/
private static class SetTextFont implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfName fontResourceName = (PdfName)operands.get(0);
float size = ((PdfNumber)operands.get(1)).floatValue();
PdfDictionary fontsDictionary = processor.resources.getAsDict(PdfName.FONT);
CMapAwareDocumentFont font = new CMapAwareDocumentFont((PRIndirectReference)fontsDictionary.get(fontResourceName));
processor.gs().font = font;
processor.gs().fontSize = size;
}
}
/**
* A content operator implementation (Tr).
*/
private static class SetTextRenderMode implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfNumber render = (PdfNumber)operands.get(0);
processor.gs().renderMode = render.intValue();
}
}
/**
* A content operator implementation (Ts).
*/
private static class SetTextRise implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfNumber rise = (PdfNumber)operands.get(0);
processor.gs().rise = rise.floatValue();
}
}
/**
* A content operator implementation (TL).
*/
private static class SetTextLeading implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfNumber leading = (PdfNumber)operands.get(0);
processor.gs().leading = leading.floatValue();
}
}
/**
* A content operator implementation (Tz).
*/
private static class SetTextHorizontalScaling implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfNumber scale = (PdfNumber)operands.get(0);
processor.gs().horizontalScaling = scale.floatValue();
}
}
/**
* A content operator implementation (Tc).
*/
private static class SetTextCharacterSpacing implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfNumber charSpace = (PdfNumber)operands.get(0);
processor.gs().characterSpacing = charSpace.floatValue();
}
}
/**
* A content operator implementation (Tw).
*/
private static class SetTextWordSpacing implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfNumber wordSpace = (PdfNumber)operands.get(0);
processor.gs().wordSpacing = wordSpace.floatValue();
}
}
/**
* A content operator implementation (gs).
*/
private static class ProcessGraphicsStateResource implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
PdfName dictionaryName = (PdfName)operands.get(0);
PdfDictionary extGState = processor.resources.getAsDict(PdfName.EXTGSTATE);
if (extGState == null)
throw new IllegalArgumentException("Resources do not contain ExtGState entry. Unable to process operator " + operator);
PdfDictionary gsDic = extGState.getAsDict(dictionaryName);
if (gsDic == null)
throw new IllegalArgumentException(dictionaryName + " is an unknown graphics state dictionary");
// at this point, all we care about is the FONT entry in the GS dictionary
PdfArray fontParameter = gsDic.getAsArray(PdfName.FONT);
if (fontParameter != null){
CMapAwareDocumentFont font = new CMapAwareDocumentFont((PRIndirectReference)fontParameter.getPdfObject(0));
float size = fontParameter.getAsNumber(1).floatValue();
processor.gs().font = font;
processor.gs().fontSize = size;
}
}
}
/**
* A content operator implementation (q).
*/
private static class PushGraphicsState implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
GraphicsState gs = (GraphicsState) processor.gsStack.peek();
GraphicsState copy = new GraphicsState(gs);
processor.gsStack.push(copy);
}
}
/**
* A content operator implementation (cm).
*/
private static class ModifyCurrentTransformationMatrix implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
float a = ((PdfNumber)operands.get(0)).floatValue();
float b = ((PdfNumber)operands.get(1)).floatValue();
float c = ((PdfNumber)operands.get(2)).floatValue();
float d = ((PdfNumber)operands.get(3)).floatValue();
float e = ((PdfNumber)operands.get(4)).floatValue();
float f = ((PdfNumber)operands.get(5)).floatValue();
Matrix matrix = new Matrix(a, b, c, d, e, f);
GraphicsState gs = (GraphicsState)processor.gsStack.peek();
gs.ctm = gs.ctm.multiply(matrix);
}
}
/**
* A content operator implementation (Q).
*/
private static class PopGraphicsState implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
processor.gsStack.pop();
}
}
/**
* A content operator implementation (BT).
*/
private static class BeginText implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
processor.textMatrix = new Matrix();
processor.textLineMatrix = processor.textMatrix;
}
}
/**
* A content operator implementation (ET).
*/
private static class EndText implements ContentOperator{
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList operands) {
processor.textMatrix = null;
processor.textLineMatrix = null;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?