Explorar el Código

PDFTool(Android) - 修复水印字体不生效问题

liuxiaolong hace 1 año
padre
commit
f92cf8f705

+ 2 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/annotation/pdfproperties/pdfsignature/CAddSignatureActivity.java

@@ -30,6 +30,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
+import com.compdfkit.core.annotation.CPDFTextAttribute;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.annotation.pdfproperties.pdfsignature.data.CSignatureDatas;
 import com.compdfkit.tools.common.utils.dialog.CImportImageDialogFragment;
@@ -202,6 +203,7 @@ public class CAddSignatureActivity extends AppCompatActivity implements View.OnC
             ivNone.setVisibility(showNoneType ? View.VISIBLE : View.GONE);
         }
         hideTypeface = getIntent().getBooleanExtra(EXTRA_HIDE_TYPEFACE, false);
+        fontView.initFont(CPDFTextAttribute.FontNameHelper.FontType.Helvetica.name(), false,false);
     }
 
     private void switchTab(int selectPosition) {

+ 4 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfproperties/pdfstyle/manager/provider/CEditSelectionsProvider.java

@@ -14,10 +14,12 @@ import android.os.Environment;
 import android.provider.MediaStore;
 import android.text.TextUtils;
 
+import com.compdfkit.core.annotation.CPDFTextAttribute;
 import com.compdfkit.core.edit.CPDFEditArea;
 import com.compdfkit.core.edit.CPDFEditImageArea;
 import com.compdfkit.core.edit.CPDFEditTextArea;
 import com.compdfkit.tools.R;
+import com.compdfkit.tools.common.utils.CLog;
 import com.compdfkit.tools.common.utils.CToastUtil;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CAnnotStyle;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleType;
@@ -167,6 +169,8 @@ public class CEditSelectionsProvider implements CStyleProvider {
             style.setFontColor(textSelections.getColor());
             int fontsize = (int) textSelections.getFontSize();
             style.setFontSize(fontsize > 0 ? fontsize : 25);
+            String psName = CPDFTextAttribute.FontNameHelper.obtainOutFontName(textSelections.getFontName(), textSelections.isBold(), textSelections.isItalic());
+            CLog.e("字体", "fontName: "+textSelections.getFontName() +"文字编辑-psName:" + psName);
             updateAnnotStyleFont(style, textSelections.getFontName());
         } else if (style.getType() == CStyleType.EDIT_IMAGE) {
             CPDFEditArea editArea = pageView.getCurrentEditArea();

+ 1 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfproperties/pdfstyle/manager/provider/CSelectedFormStyleProvider.java

@@ -132,7 +132,7 @@ public class CSelectedFormStyleProvider implements CStyleProvider {
                 listBoxWidget.setFontName(getAnnotStyleFontName(style));
                 listBoxWidget.updateAp();
                 baseAnnotImpl.onAnnotAttrChange();
-//                ((CPDFListboxWidgetImpl) baseAnnotImpl).refresh();
+                ((CPDFListboxWidgetImpl) baseAnnotImpl).refresh();
                 if (pageView != null) {
                     pageView.invalidate();
                 }

+ 2 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfproperties/pdfstyle/manager/provider/CStyleProvider.java

@@ -44,7 +44,8 @@ public interface CStyleProvider {
     default public void updateAnnotStyleFont(CAnnotStyle annotStyle, String attrFontName){
         String familyName = CPDFFont.getFamilyName(attrFontName);
         CLog.e("字体", "获取到字体:" + attrFontName);
-        if (!TextUtils.isEmpty(familyName)){
+
+        if (!TextUtils.isEmpty(familyName)) {
             annotStyle.setFontType(CPDFTextAttribute.FontNameHelper.FontType.Unknown);
             annotStyle.setExternFontName(familyName);
         }else {

+ 11 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/security/watermark/CWatermarkPageFragment.java

@@ -155,6 +155,7 @@ public class CWatermarkPageFragment extends Fragment {
         annotStyle.setFontSize(watermarkPageView.watermarkView.getTextSize());
         annotStyle.setTextColorOpacity(watermarkPageView.watermarkView.getWatermarkAlpha());
         annotStyle.setFontType(watermarkPageView.watermarkView.getFontType());
+        annotStyle.setExternFontName(watermarkPageView.watermarkView.getOutFamilyName());
         annotStyle.setFontBold(watermarkPageView.watermarkView.isBold());
         annotStyle.setFontItalic(watermarkPageView.watermarkView.isItalic());
         annotStyle.setChecked(watermarkPageView.isTile());
@@ -188,6 +189,16 @@ public class CWatermarkPageFragment extends Fragment {
                 watermarkPageView.updateTileWatermark();
             }
 
+            @Override
+            public void onChangeAnnotExternFontType(String fontName) {
+                super.onChangeAnnotExternFontType(fontName);
+                watermarkPageView.watermarkView.setTypeface(
+                        fontName,
+                        watermarkPageView.watermarkView.isBold(),
+                        watermarkPageView.watermarkView.isItalic());
+                watermarkPageView.updateTileWatermark();
+            }
+
             @Override
             public void onChangeFontBold(boolean bold) {
                 super.onChangeFontBold(bold);

+ 1 - 3
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/security/watermark/view/CWatermarkPageView.java

@@ -387,9 +387,7 @@ public class CWatermarkPageView extends FrameLayout {
             }
             watermark.setScale(watermarkView.getScale() * whScale);
         }
-        watermark.setFontName(CPDFTextAttribute.FontNameHelper.obtainFontName(
-                watermarkView.getFontType(), watermarkView.isBold(), watermarkView.isItalic()
-        ));
+        watermark.setFontName(watermarkView.getFontName());
         watermark.setText(watermarkView.getText());
         watermark.setTextRGBColor(watermarkView.getTextColor());
         watermark.setFontSize(watermarkView.getTextSize() * whScale);

+ 44 - 2
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/security/watermark/view/CWatermarkView.java

@@ -312,6 +312,8 @@ public class CWatermarkView extends View {
 
     private CPDFTextAttribute.FontNameHelper.FontType fontType = CPDFTextAttribute.FontNameHelper.FontType.Helvetica;
 
+    private String outFamilyName;
+
     private boolean isBold = false;
 
     private boolean isItalic = false;
@@ -533,7 +535,11 @@ public class CWatermarkView extends View {
      * @param bold
      */
     public void setBold(boolean bold) {
-        setTypeface(getFontType(), bold, isItalic());
+        if (!TextUtils.isEmpty(outFamilyName)){
+            setTypeface(outFamilyName, bold, isItalic());
+        }else {
+            setTypeface(getFontType(), bold, isItalic());
+        }
     }
 
     /**
@@ -542,7 +548,11 @@ public class CWatermarkView extends View {
      * @param italic
      */
     public void setItalic(boolean italic) {
-        setTypeface(getFontType(), isBold(), italic);
+        if (!TextUtils.isEmpty(outFamilyName)){
+            setTypeface(outFamilyName, isBold(), italic);
+        }else {
+            setTypeface(getFontType(), isBold(), italic);
+        }
     }
 
     /**
@@ -561,6 +571,7 @@ public class CWatermarkView extends View {
         this.typeface = typeface;
         this.fontType = fontType;
         this.isBold = isBold;
+        this.outFamilyName = "";
         this.isItalic = isItalic;
         txtPaint.setTypeface(this.typeface);
         calculateBaseLine();
@@ -568,10 +579,41 @@ public class CWatermarkView extends View {
         transformDraw();
     }
 
+    public void setTypeface(String outFamilyName, boolean isBold, boolean isItalic) {
+        String psName = CPDFTextAttribute.FontNameHelper.obtainOutFontName(outFamilyName, isBold, isItalic);
+        Typeface typeface = CPDFTextAttribute.FontNameHelper.getOutTypeface(getContext(), psName);
+        this.typeface = typeface;
+        this.fontType = CPDFTextAttribute.FontNameHelper.FontType.Unknown;
+        this.outFamilyName = outFamilyName;
+        this.isBold = isBold;
+        this.isItalic = isItalic;
+        txtPaint.setTypeface(this.typeface);
+        calculateBaseLine();
+        calculateDrawToCenterDistance();
+        transformDraw();
+    }
+
+
     public CPDFTextAttribute.FontNameHelper.FontType getFontType() {
         return fontType;
     }
 
+    public String getOutFamilyName() {
+        return outFamilyName;
+    }
+
+    public String getFontName(){
+        if (!TextUtils.isEmpty(outFamilyName)){
+            return CPDFTextAttribute.FontNameHelper.obtainOutFontName(
+                    outFamilyName, isBold(), isItalic()
+            );
+        }else {
+            return CPDFTextAttribute.FontNameHelper.obtainFontName(
+                    fontType, isBold(), isItalic()
+            );
+        }
+    }
+
     /**
      * 设置旋转图
      *

+ 2 - 2
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/importcert/create/CPDFSelectDigitalSignatureDialog.java

@@ -54,12 +54,12 @@ public class CPDFSelectDigitalSignatureDialog extends DialogFragment implements
             if (result.getData().getStringExtra("file_path") != null){
                 signImagePath = result.getData().getStringExtra("file_path");
                 if (certDigitalSignListener != null) {
-                    certDigitalSignListener.sign(certFilePath,certPassword, signImagePath);
+                    certDigitalSignListener.sign(certFilePath, certPassword, signImagePath);
                 }
             } else if (result.getData().getBooleanExtra(CAddSignatureActivity.RESULT_NONE, false)){
                 signImagePath = "";
                 if (certDigitalSignListener != null) {
-                    certDigitalSignListener.sign(certFilePath,certPassword, signImagePath);
+                    certDigitalSignListener.sign(certFilePath, certPassword, signImagePath);
                 }
             }
         }